【发布时间】:2018-05-12 08:01:24
【问题描述】:
我查看了许多不同的主题,但没有找到问题的答案。我在我的 Ubuntu 服务器上创建了 2 个 bash 脚本,并尝试定期执行它们。看起来他们正在运行,但他们什么也没产生。它们是可执行的:
drwxr-xr-x 14 root root 4096 Mar 14 18:02 ..
-rwxr-xr-x 1 root root 2623 Apr 16 21:18 backup.pl
-rw-r--r-- 1 root root 87066352 May 10 21:37 full_site_backup-10-4-2018.tar.gz
-rwxr-xr-x 1 root root 530 May 11 20:21 checkHealth.sh
drwxr-xr-x 2 root root 4096 May 11 20:35 .
所以这是我的脚本之一:
#!/bin/bash
# log stdout and stderr to two different files
exec >>/var/log/test.log 2>>/var/log/test.err.log
# ...and log every command we try to execute to stderr (aka looog.err.log)
# set -x
CODE=$(curl -s -o /dev/null -I -A "myuseragent" -w "%{http_code}" https://www.xxxxxxxxxxxxx.xxx/xxxx)
DATE=$(date)
if [ $CODE -gt 300 ]
then
service mysql restart
service tomcat8 restart
>&2 echo "$DATE - KO !!!!!! code retour $CODE"
else
echo "$DATE - OK, code $CODE"
fi
这是我的sudo crontab -e:
# m h dom mon dow command
0 2 * * * root /usr/bin/perl /var/backup/backup.pl
* * * * * root /bin/sh /var/backup/checkHealth.sh
这是我的sudo tail -f /var/log/cron.log:
May 11 20:39:01 ns381471 CRON[10778]: (root) CMD (root /bin/sh /var/backup/checkHealth.sh)
May 11 20:39:26 ns381471 crontab[10823]: (root) BEGIN EDIT (root)
May 11 20:40:01 ns381471 CRON[10880]: (root) CMD (root /bin/sh /var/backup/checkHealth.sh)
May 11 20:40:01 ns381471 CRON[10879]: (root) CMD (/usr/local/rtm/bin/rtm 2 > /dev/null 2> /dev/null)
May 11 20:40:30 ns381471 crontab[10823]: (root) END EDIT (root)
May 11 20:41:01 ns381471 CRON[10974]: (root) CMD (/usr/local/rtm/bin/rtm 2 > /dev/null 2> /dev/null)
May 11 20:41:01 ns381471 CRON[10975]: (root) CMD (root /bin/sh /var/backup/checkHealth.sh)
May 11 20:42:01 ns381471 CRON[11070]: (root) CMD (/usr/local/rtm/bin/rtm 2 > /dev/null 2> /dev/null)
May 11 20:42:01 ns381471 CRON[11071]: (root) CMD (root /bin/sh /var/backup/checkHealth.sh)
任何帮助将不胜感激。谢谢
【问题讨论】:
-
你检查过
/var/log/test.log和/var/log/test.err.log这两个日志文件了吗?另请注意,您正在使用/bin/sh执行脚本,而其#!-line 显示/bin/bash。 另外你将curl结果输出到/dev/null,所以$CODE很可能是空的。 -
如果您手动运行它们会起作用吗?您能否添加更多调试输出,例如curl 命令之前的一条消息,之后可能还有一条包含结果的消息?
-
@Kusalananda,我认为 -o 和 -w 独立运行:-o 将 (-I) 响应标头发送到 devnull,但响应代码仍会发送到 stdout。
-
修改您的 crontab 以捕获输出(如果有)。所以
* * * * * COMMAND >/tmp/out1.txt 2>/tmp/out2.txt。然后查看输出文件。 -
Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地点。