我想使用 cron 作业来运行涉及 python 脚本的任务。
该任务的 bash 脚本如下所示:
#!/bin/bash
...
python ./script.py &
...
通过 crontab 调用如下:
* 8 * * * ./task.sh
这完全满足我的需求,但当这个讨厌的图标出现在 Dock 中并窃取当前输入设备焦点时,它会中断我在任务触发时可能正在输入的任何内容。
有没有办法告诉 python 在后台运行,类似于python script.py
通过 Terminal.app 运行命令?
编辑:看起来 Matplotlib 是罪魁祸首。https://github.com/matplotlib/matplotlib/issues/12918/从 CLI 运行时使用matplotlib.use("Agg")
禁用交互式环境可以避免出现此问题。
答案1
这不是您的问题的答案,但我无法在评论中添加这个细节,因此在这里添加,也许它会帮助您进行一些调试......
我每晚都会运行一个 Perl 脚本(将一个磁盘备份到另一个磁盘),但我从未见过这种行为。我只是修改了 cron 以在我观看时运行,而我没有在 Perl 脚本中看到这种情况。
因此,我再次尝试使用这些 Bash 和 Python 脚本:
#!/bin/bash
echo Starting Bash...
python3 /Users/jim/Documents/scripts/hello.py &
sleep 3
echo Ending Bash...
和
#!/usr/bin/env python3
import time
print ("Hello, world!\n")
time.sleep(60)
print ("Goodnight, moon!\n")
还有一个 cron 任务:
04 * * * * /Users/jim/Documents/scripts/hello.sh >> ~/Library/Logs/test.log 2>&1
我不明白您显示的行为。Python(或 Perl)没有停靠图标,事实上,我几乎从未见过像这样的常规 Unix 可执行文件停靠图标出现。
如果右键单击/按住 Ctrl 键单击 Python 图标并选择“选项”->“在 Finder 中显示”,将调用哪个 Python?它与手动运行脚本时调用的 Python 不同吗?