0

我为 root 用户 ( )进行了以下crontab设置sudo crontab -e

@reboot cd /home/pi/ && python3 myscript.py 2>&1 >> log.txt

myscript.py给定时间执行以下命令:

import subprocess
subprocess.call('shutdown -h now', shell=True)

问题是当此命令在重新启动时作为 crontab 运行时出现以下错误:

/bin/sh: 1: shutdown: not found

而当我以 root 用户身份登录后运行以下行时:

cd /home/pi/ && python3 myscript.py 2>&1 >> log.txt

一切正常,系统在没有该错误的情况下关闭。

即使我没想到,这两个命令的执行方式似乎也有所不同。可能是 crontab @reboot 以某种方式具有不同的上下文,因此与root 用户执行该命令时的行为不完全相同?

4

3 回答 3

1

通常,cron 作业使用缩减的 PATH 运行。我会尝试shutdown在脚本中使用绝对路径。

于 2020-06-22T11:51:21.657 回答
1

调用以下命令来查找shutdown二进制文件的位置:

whereis shutdown

在我的覆盆子上,我有以下输出:

whereis shutdown
shutdown: /sbin/shutdown /usr/share/man/man8/shutdown.8.gz /usr/share/man/man2/shutdown.2.gz

然后,将脚本调用从更改shutdown为关闭二进制文件的完整路径(对我来说:)/sbin/shutdown

于 2020-06-22T11:49:05.943 回答
0

这确实是一个缺失的背景;像这样将 PATH 添加到 crontab 中:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

@reboot cd /home/pi/ && python3 myscript.py 2>&1 >> log.txt

似乎已经解决了这个问题。

于 2020-06-22T12:56:54.473 回答