尽管脚本在手动运行时有效,但 Crontab 没有在 macOS 中运行我的 python 脚本

Posted

技术标签:

【中文标题】尽管脚本在手动运行时有效,但 Crontab 没有在 macOS 中运行我的 python 脚本【英文标题】:Crontab isn't running my python script in macOs although the script works when run manually 【发布时间】:2022-01-19 05:52:33 【问题描述】:

我的学校总是希望我们下载 pptx 和 docx 用于讲座和实践,我讨厌我总是需要在阅读完成后手动删除它。因此,我创建了一个脚本来丢弃文件夹中的所有内容,并希望 crontab 将其安排为每小时运行一次。

当我通过终端手动运行此代码时,一切正常。

def remove_trash():
    import os
    dir_path = os.path.dirname(os.path.realpath(__file__))
    filename = os.path.join(dir_path, "trash_script.py")
    with open(filename, "r") as f:
        _ = f.read()
    os.system(f"rm -df dir_path/* && touch filename")
    with open(filename, "w") as f:
        f.write(_)
        
if __name__ == "__main__":
    remove_trash()

但是当我在我的 crontab 中添加这个时,

0 * * * * python ~/Desktop/Projects/script/Trash/trash_script.py

我尝试授予文件执行权限,但它仍然不会在每分钟 0 处运行。

chmod +x trash_script.py

【问题讨论】:

【参考方案1】:

我建议先将您的脚本移动到 bash 脚本中,然后添加一些日志来查找问题。 bash 脚本将如下所示:

trash.sh

cd ~/Desktop/Projects/script/Trash
python trash_script.py

更改脚本的执行权限

chmod +x trash.sh

将您的 cron 作业修改为如下所示:

0 * * * * sh <path_to_bash_script>/trash.sh >> ~/Desktop/Projects/script/Trash/trash.log 2>&1

这将有助于在每次脚本运行时获得一些输出。

【讨论】:

以上是关于尽管脚本在手动运行时有效,但 Crontab 没有在 macOS 中运行我的 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

bash 脚本在启动时有效,在终端中无效

通过触发器运行时计划作业失败,但在手动运行时有效

Process.Start() 未启动 .exe 文件(手动运行时有效)

Vue 组件在“手动”多次使用时不会呈现......但在循环重复时有效

通过 C# .NET 应用程序调用时无法识别命令,但直接调用时有效

Bash 脚本手动运行,但在 crontab 上失败