【问题标题】:Changing Cronjob path更改 Cronjob 路径
【发布时间】:2013-07-16 04:30:56
【问题描述】:

我正在尝试让一个 cronjob 运行一个基本的 Python 脚本作为概念验证练习。 Python脚本如下:

#!/usr/bin/python
with open('realfile','a+') as f:
     f.write('testwrite\n')

我的脚本(连同 'realfile' 文件)位于我的主目录(即 $HOME/Documents)下的一个 'Documents' 目录中。

我的crontab如下:

*/1 * * * * /$HOME/Documents/crontest.py

由于某种原因,crontab 不会按应有的每分钟执行脚本。该脚本运行良好,因为我从命令行手动运行它(使用 ./crontest.py)。此外,当脚本位于主目录中时,crontab 工作得非常好,而 crontab 很简单:

*/1 * * * * /$HOME/crontest.py

我已经使用“locate crontest.py”检查了“crontest.py”的位置,我得到了以下两个位置:
/home/meric/crontest.py /usr/bin/crontest.py

我尝试在我的 crontab 中设置这两个路径,但作业仍然无法运行。

可能是什么问题?感谢您的帮助!

【问题讨论】:

  • 在 crontab 条目和脚本中使用完全展开的绝对路径,看看是否有帮助。
  • 另外,如果您的电子邮件设置(nullmailer?)配置正确,您应该会收到一封包含错误详细信息的电子邮件。

标签: bash ubuntu cron crontab


【解决方案1】:

AFAIK,cron 作业的工作目录是他们执行的用户的家。因此,如果您的Documents 子目录中同时存在crontest.pyrealfile,则crontest.py 应该执行,然后在您家中找不到realfile 时失败。像欧文所说的那样重新检查路径;此外,您可以使用它在任意工作目录中运行:

*/1 * * * * cd /home/meric/Documents && ./crontest.py

【讨论】:

    【解决方案2】:

    您的脚本不在目录中:

    /$HOME/Documents/crontest.py
    

    你在底部说它在:

    /home/meric/crontest.py /usr/bin/crontest.py
    

    为什么不复制到:

    $HOME/Documents/crontest.py
    

    然后再试一次。

    【讨论】:

    • 问题是,我的脚本实际上位于该目录中。我不确定为什么 'locate crontest.py' 会给出这两个路径,而 'crontest.py' 实际上位于 $HOME/Documents/crontest.py
    【解决方案3】:

    我认为你错过了 python 代码的绝对路径。试试这个:

    #!/usr/bin/python
    import os
    with open((os.getenv('HOME') + '/Documents/' +'realfile'),'a+') as f:
       f.write('testwrite\n')
    

    并编辑 cron 作业:

    */1 * * * * $HOME/Documents/crontest.py
    

    因为$HOME 变量已经包含/

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2014-03-23
      • 2018-12-10
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多