我有一个 cron 任务被写入 root(我正在写入日志,/var/log
因此需要 root 权限)。问题是它有时有效,有时无效。
cron 作业只是调用我主目录中的 python 脚本,然后它就会完成所有艰苦的工作。
我将工作设置为在半夜执行,这样它就不会干扰我正在做的事情,并且它与之交互的 API 不太可能发生变化(API 全天更新)。
但是每天早上我检查日志都会出现以下错误:
python3: can't open file '/home/myUser/path/to/the/main.py':
[Errno 2] No such file or directory
我对此的回应是将 crontab 上的时间更改为比我检查日志的时间长几分钟,等待几分钟,然后文件开始运行。仅有的我改变的是时间,然后它突然就起作用了。
所以我确信该文件存在。
我尝试过晚上的不同时间(30 23 * * *, 01 01 * * *, 10 02 * * *
)都没有用,但只要我在早上检查后将其关闭 2 分钟,就可以了。
以下是当前的 crontab:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
01 01 * * * python3 /home/myUser/path/to/the/main.py >> /var/log/thisjobs.log 2>&1
还值得一提的是,这项工作后还有一个额外的换行符(我听说这是必要的)。
有人见过这种情况吗?我可以尝试什么方法来找到这个文件,而不必每次都手动更改脚本?
编辑:这是我的env
输出cron
:
LANGUAGE=en_GB:en
HOME=/root
LOGNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/root
还想提一下,我曾尝试使用以下命令(在计时之后)但无济于事(同样的错误,但只是用main.py
完整路径代替):
cd /home/myUser/path/to/the; python3 main.py
答案1
原来答案是这样的:Cron 在晚上失败
我整晚都在我的服务器上运行这个程序(我只ssh
登录过)。因此,拥有一个加密的主驱动器意味着,当我没有登录时,除了 之外的任何东西都无法访问home
,包括cron
。
我将脚本移到了/usr/local/bin
(可能有更好的地方放它,但我觉得没有其他合适的地方),这意味着我可以在没有任何路径的情况下调用它(假设你已经设置了变量PATH
)。
现在一切都正常进行。