脚本在crontab中不起作用,但在终端中起作用

时间:2019-05-14 02:20:11

标签: linux bash shell awk centos

我正在尝试在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

1 个答案:

答案 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表示感谢,他告诉我跟踪日志,然后在脚本中提供完整路径。我没有意识到这是必要的,因为脚本与“用户”位于同一目录。