首页 文章

Cron工作没有开始

提问于
浏览
5

我有一个我想要每5分钟执行一次的cron作业:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /scr_temp/scheduleSpider.sh

/var/spool/cron/crontabs/root

cron应该执行shell脚本:

#!/bin/sh
if [ ! -f "sync.txt" ]; then
    touch "sync.txt"
    chmod 777 /scr_temp
    curl someLink
fi

从命令行可以正常工作,但不能从cron工作 . 然而,cron本身是startet但脚本没有启动 .

我读到了路径问题,但我真的不明白 . 我设置了一个将一些env数据写入文件的cron . 这是输出:

HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
SHELL=/bin/sh

如果我在命令行中执行env命令,我会得到以下PATH输出

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

我需要在shell脚本中设置什么路径?

7 回答

  • 0

    你的 $PATH 很好;不要管它 . 在Ubuntu上,您正在调用的所有命令( touchchmodcurl )都在 /bin 和/或 /usr/bin 中 .

    你是怎么设立cron工作的?你是否以root身份运行 crontab some-file

    似乎 /etc/crontab 是以root身份运行cron命令的常用机制 . 在我的Ubuntu系统上, sudo crontab -lno crontab for root . 以root身份运行 crontab ,就像对任何非root帐户一样,应该没问题,但您可以考虑使用 /etc/crontab . 请注意,它使用与普通crontab不同的语法,如 /etc/crontab 顶部的注释中所述:

    $ head -5 /etc/crontab
    # /etc/crontab: system-wide crontab
    # Unlike any other crontab you don't have to run the `crontab'
    # command to install the new version when you edit this file
    # and files in /etc/cron.d. These files also have username fields,
    # that none of the other crontabs do.
    

    运行 sudo crontab -l . 它会显示你的命令吗?

    暂时修改脚本,使其始终产生一些可见的输出 . 例如,在 #!/bin/sh 之后添加以下内容:

    echo "Running scheduleSpider.sh at \`date\`" >> /tmp/scheduleSpider.sh.log
    

    几分钟后看看 /tmp/scheduleSpider.sh.log 中的内容 . (您可以将命令设置为每分钟运行一次,这样您就不必等待结果 . )如果可行(应该),您可以在脚本中添加更多 echo 命令,以详细查看它正在执行的操作 .

    看起来您的脚本只能运行一次;它会创建 sync.txt 文件以防止它再次运行 . 这可能是你问题的根源(咳咳) . 你的意图是什么?你的意思是在运行命令后删除 sync.txt ,只是忘了这么做?

    root 在Ubuntu上的主目录是 /root . 您的脚本第一次运行时,应该创建 /root/sync.txt . 该文件是否存在?如果是这样,它多大了?

    请注意 curl someLink (假设 someLink 是有效的URL)只会将指定链接中的内容转储到标准输出 . 这是你的意图(它会显示为 root 的电子邮件吗?或者你只是没有告诉我们整个命令?

  • 1

    首先:您可以用 */5 替换第一个字段(请参阅man 5 crontab)第二个:通过在crontab中输入 MAILTO=your@email.address ,将输出邮件发送到您的电子邮件地址 . 如果脚本有任何输出,它将被邮寄 . 而不是那样,你可以有一个本地邮箱,你可以在其中找到cron输出(通常是$ MAIL) .

  • 1

    CRON的更好的语法是

    */5 * * * * /scr_temp/scheduleSpider.sh
    

    另外,请检查 scheduleSpider.sh 文件的权限 . Cron运行的用户与您可能以交互方式执行程序的用户不同,因此可能是cron没有权限 . 现在试试 chmod 777 ,只是为了检查 .

  • -1

    您是否通过 crontab -e 或仅通过编辑crontab文件添加了命令?您应该使用 crontab -e 来正确更新它 .

  • 4

    您应该在脚本的绝对路径之前添加/ bin / sh .

    */5 * * * * /bin/sh /scr_temp/scheduleSpider.sh
    
  • 2

    我建议:

    • 检查 /scr_temp/scheduleSpider.sh 是否具有可执行位

    • 在脚本内正确设置 PATH 或使用命令的绝对路径( /bin/touch 而不是 touch

    • 指定 sync.txt 文件的绝对路径(或相对于脚本计算它)

  • 0

    在cron脚本中设置工作目录,它可能不会执行您认为应该执行的操作 .

相关问题