【问题标题】:Crontab Source Commandcrontab 源命令
【发布时间】:2021-10-11 05:27:06
【问题描述】:

我正在尝试向 cron 添加作业,我遇到了这个问题:

You must source this script: $ source /home/flask/bin/activate

当我尝试使用 . 代替 ````source```

那么这就是问题所在:

mesg: ttyname failed: Inappropriate ioctl for device
.: .: is a directory

这是我的 crontab 文件:

SHELL=/bin/bash
PYTHONPATH="/home/flask/"
* * * * * bash -l  /home/flask/bin/activate && python3 application/script/myscript.py

任何帮助都会很棒,非常感谢。

【问题讨论】:

  • 您没有显示导致错误的activate 脚本的违规部分。

标签: python bash shell cron


【解决方案1】:

当你的 crontab 中有这个时

bash -l foo && bar

cron(或者更严格地说,由 cron 调用的 shell)首先运行 bash -l foo,然后作为单独的命令运行 bar。这可能不是你想要的。 (它将对 bash 实例的本地 foo 完成的 shell 环境进行任何更改,因此对 bar 不可见)。此外,foo 应该是一个文件名,所以 . 在那里不起作用(因此“. is a directory”消息)。

这可能行得通

bash -c ". /whatever/activate; python3 foo.py"

但我建议将所有需要的东西放在一个 shell 脚本中,然后从 cron 调用该脚本。

我不确定 tty 的东西。它看起来真的想要一个终端与之交谈,但这可能是你的 bash_profile 或类似的东西,因为你正在使用 -l 运行 bash。

【讨论】:

    【解决方案2】:

    我用这个修复了它:

    SHELL=/bin/bash
    PYTHONPATH="/home/flask/"
    * * * * * bash -c ". /home/flask/bin/activate; python3 application/script/myscript.py"
    
    
    
    

    感谢 Ture Pålsson 的回答

    【讨论】:

    • 你不应该需要带有 SHELL=/bin/bashbash -c 包装器
    猜你喜欢
    • 2019-10-26
    • 2015-07-25
    • 2019-09-14
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2015-05-27
    • 2014-12-03
    相关资源
    最近更新 更多