【发布时间】:2019-09-30 23:49:58
【问题描述】:
我正在尝试在 Centos 5.5 的 crontab 中运行 bash 脚本,但我没有看到它作为 pid (pid -e) 运行。该脚本本身使用 awk 命令来监控关键字的运行日志,然后发送一封电子邮件,然后一旦服务器重新上线,它就会发送一封确认电子邮件:
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 }'
最初,我在终端关闭时无法运行脚本。有人建议通过以下方式使用setsid:
setsid server_mon.sh >/dev/null 2>&1 < /dev/null &
这很好用.. 直到它没有。出于某种原因,经过一天左右的时间后,脚本不再发送通知。所以,我想为脚本创建一个 cronjob。
不熟悉 bash shell,也不是一个程序员,我每分钟都在 cron 中测试脚本,看看我是否正确使用它:
* * * * * /var/log/server_mon.sh
没用。它只会说:
"/tmp/crontab.XXXXmu99ii" 19L, 760C written
crontab: installing new crontab
尝试使用 rc.local.. 不能。我认为 centos 版本太旧(5.5),另外,crontab 可能是要走的路,因为我可能想知道通知似乎在什么时候停止工作并相应地设置一个 cron 工作.. 至少直到我有时间修复它。
尝试在脚本中添加 awk 命令的路径:/usr/bin/awk 还是没有pid。
尝试根据我在网上找到的内容添加以下更改:
setsid bash -lic 'cd /var/log && exec SLR_reaper.sh -start' </dev/null &>/dev/null &
没用,不知道对不对。
我的预期结果是:
setsid server_mon.sh >/dev/null 2>&1 < /dev/null &
不知何故被 crontab 触发:
@reboot /var/log/server_mon.sh
*or*
* * * * * /var/log/server_mon.sh
只是为了看到它的工作。
任何方向或帮助都会很棒。如果您需要更多信息,请告诉我。谢谢!
发送到邮件的日志屏幕截图: enter image description here
【问题讨论】:
-
试试
* * * * * /bin/sh ./var/log/server_mon.sh -
刚试过。还是没有pid
-
如果你没有将 stderr 重定向到 /dev/null 那么你可能不会说
For some reasonwrt 为什么setsid server_mon.sh >/dev/null 2>&1 < /dev/null &失败,因为它可能打印了它失败到 stderr 的原因。 -
@Ed Morton 好建议。我需要看看到底发生了什么
-
@EdMorton 是的!击中我朋友的头。
标签: linux bash shell awk centos