【问题标题】:Crontab not executingcrontab 没有执行
【发布时间】:2018-01-14 20:40:54
【问题描述】:

我有一个 shell 脚本和一个 python 脚本,我希望每两分钟执行一次。一个是 curl 请求,另一个是分析其内容。

这是我的 crontab 中的内容:

*/2 * * * * $HOME/Routes/curl.sh
*/2 * * * * $HOME/Routes/analyse.py >> $HOME/Routes/analyse.log 2>&1

这两个文件都可以通过chmod +x 执行。正在创建文件“analysis.log” - 但其中没有任何内容。

grep CRON /var/log/syslog 显示此消息的出现,每次文件都应执行。

1 月 14 日 20:36:01 覆盆子 CRON[23217]:(CRON) 信息(未安装 MTA,丢弃输出)

我错过了什么?我的错在哪里?

谢谢!

【问题讨论】:

    标签: cron


    【解决方案1】:

    MTA 是“邮件传输代理”,一种发送电子邮件的程序。 Cron 告诉您它想向您发送报告作业执行结果的电子邮件,但它找不到可以用来执行此操作的程序。

    每当作业向其标准错误流写入内容时,Cron 都会尝试发送电子邮件,因此您的 curl.sh 脚本可能会抱怨出现问题。 (您的 analyse.py 将其 stderr 折叠到 stdout 中,因此不应将任何消息传递给 cron,除非出现问题过早导致重定向尚未生效。)您可以尝试编辑 curl.sh 作业以重定向 stderr放入一个文件中,以便您可以看到它试图告诉您的内容:

    */2 * * * * $HOME/Routes/curl.sh 2>$HOME/Routes/curl-stderr.txt
    

    顺便说一句,如果 analyse.py 应该检查 curl.sh 的输出,那么您告诉 cron 同时运行它们似乎很奇怪。让 cron 作为单个作业的一部分一个接一个地运行它们不是更有意义吗?喜欢:

    */2 * * * * $HOME/Routes/curl.sh ; $HOME/Routes/analyse.py >> $HOME/Routes/analyse.log 2>&1
    

    脚本失败的一个非常常见的原因是它们依赖于在特定工作目录中执行或使用存在于用户终端 shell 中但不存在于 cron 作业环境中的环境设置执行。 $PATH 是在这两种情况下与众不同的有力候选人。您可以尝试像这样运行您的脚本:

      cd $HOME
      env PATH="/usr/bin:/bin" SHELL=/bin/sh $HOME/Routes/curl.sh
      env PATH="/usr/bin:/bin" SHELL=/bin/sh $HOME/Routes/analyse.py
    

    检查它们在 cron 的精简环境中是否正常运行。

    【讨论】:

      【解决方案2】:

      感谢您的帮助。您对并行处理的建议非常有帮助。

      我的主要问题是 Cron 在错误的目录上工作。我在脚本中有一些相对路径,这些路径在 shell 中运行时有效,因为我在正确的目录中。 Cron 似乎再次有一个不同的工作目录,这导致了麻烦。

      再次感谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-27
        • 2013-08-28
        • 2021-12-24
        • 2015-11-03
        • 2019-09-11
        • 1970-01-01
        • 2011-10-22
        • 1970-01-01
        相关资源
        最近更新 更多