【问题标题】:Cron script executed but no output已执行 Cron 脚本但没有输出
【发布时间】: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 UserUnix & Linux Stack Exchange 会是一个更好的提问地点。

标签: linux bash ubuntu cron


【解决方案1】:

对于那些处于相同情况的人来说,我的 crontab 是

# m h  dom mon dow   command

0 2 * * * root /usr/bin/perl /var/backup/backup.pl
* * * * * root /bin/sh /var/backup/checkHealth.sh

看来我只是复制了您可以在许多关于编辑/etc/crontab 的 cron 教程中找到的语法,但在我的情况下,我做了一个 sudo crontab -e,所以我不必指定用户(root),所以工作条目是:

# m h  dom mon dow   command

0 2 * * * /usr/bin/perl /var/backup/backup.pl
* * * * * /bin/sh /var/backup/checkHealth.sh

或更简单:

# m h  dom mon dow   command

0 2 * * * /var/backup/backup.pl
* * * * * /var/backup/checkHealth.sh

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 2012-03-02
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多