我正在尝试在Centos 5.5上的crontab中运行bash脚本,但是我看不到它作为pid(pid -e)运行。该脚本本身使用awk命令来监视关键字的运行日志,然后发送电子邮件,然后服务器重新联机后,它将发送确认电子邮件:
min-height: auto
最初,我在关闭终端时无法运行脚本。有人建议通过以下方式使用setsid:
tail -fn0 user | awk '
!server_down && /disconnect_tcp_conn/ {
system("mail -s \"server down\" mail@gmail.com </dev/null")
print "server down"
server_down = 1 }
server_down && /daemon apps started/ {
system("mail -s \"server's back!\" mail@gmail.com </dev/null")
print "Server's back!"
server_down = 0 }'
这很好用..直到没有用。由于某种原因,经过一天左右的时间后,脚本不再发送通知。因此,我想为该脚本创建一个cronjob。
不熟悉bash shell,也没有太多的程序员,我每分钟都在cron中测试该脚本,以查看我是否正确使用了它:
setsid server_mon.sh >/dev/null 2>&1 < /dev/null &
没用。它只会说:
* * * * * /var/log/server_mon.sh
试图使用rc.local。我认为centos版本太旧(5.5),此外,crontab可能是一种解决方法,因为我可能想知道通知似乎在什么时候停止工作并相应地设置cron作业..至少直到我有时间修复它。
试图在脚本中将路径添加到awk命令:/ usr / bin / awk 仍然没有生气。
尝试添加从网上发现的内容以下更改:
"/tmp/crontab.XXXXmu99ii" 19L, 760C written
crontab: installing new crontab
不起作用,不确定是否正确。
我的预期结果是得到这个:
setsid bash -lic 'cd /var/log && exec SLR_reaper.sh -start' </dev/null &>/dev/null &
由crontab触发:
setsid server_mon.sh >/dev/null 2>&1 < /dev/null &
只是看到它起作用。
任何方向或帮助都会很棒。如果您需要更多信息,请让我知道。谢谢!
发送到邮件的日志的屏幕截图: enter image description here
答案 0 :(得分:1)
因此解决方案非常简单。我只需要在脚本本身中提供脚本正在监视的文件的路径:
tail -fn0 /var/log/user | /usr/bin/awk '
!server_down && /disconnect_tcp_conn/ {
system("mail -s \"server is down XXX.XXX.XXX.XXX\" mail@gmail.com </dev/null")
print "server is Down XXX.XXX.XXX.XXX"
server_down = 1 }
server_down && /daemon apps started/ {
system("mail -s \"Server is up XXX.XXX.XXX.XXX\" mail@gmail.com </dev/null")
print "Server is Up XXX.XXX.XXX.XXX"
server_down = 0 }'
日志文件报告找不到该文件,这提示我是与路径相关的问题。
先前的脚本为:
tail -fn0 user | /usr/bin/awk '
现在,我添加了完整路径:
tail -fn0 /var/log/user | /usr/bin/awk '
对@EdMorton表示感谢,他告诉我跟踪日志,然后在脚本中提供完整路径。我没有意识到这是必要的,因为脚本与“用户”位于同一目录。