crontab 在重启时无法 运行 python 脚本

crontab failed to run python script at reboot

我有一个 raspberry pi 零和一个 python 脚本位于

/home/pi/Documents/camProject

将日期和时间写入 log.txt 文件。

import datetime
import json
now = datetime.datetime.now()
now = str(now)

with open('log.txt','w') as f:
    json.dump(now, f)
    
print('script complete')
print(now)

当我站在 camProject 文件夹中时,我可以从控制台调用并执行脚本。

pi@raspberrypi:~/Documents/camProject $ sudo python3 "/home/pi/Documents/camProject/test.py"
script complete
2020-10-17 08:39:46.238224

我希望这个 test.py 脚本在每次重新启动时 运行,所以我从命令控制台做到了

sudo crontab -e

在我写的crontab脚本的底部

@reboot sudo python3 "/home/pi/Documents/camProject/test.py"

重新启动 raspberry pi 设备后没有任何反应,日期也没有写入 log.txt 文件。我试过执行

sudo python3 "/home/pi/Documents/camProject/test.py"

从我的主目录

/home/pi

并且我在控制台中看到了我的 test.py 的打印输出,但是 log.txt 没有更新。但是,如果我从 test.py 所在的文件夹执行相同的脚本,一切正常。然后我检查了权限并在我的 camProject 文件夹中

pi@raspberrypi:~/Documents/camProject $ ls -l
totalt 20
-rwxrwxrwx 1 pi pi   66 okt 17 00:00 camVision.py
-rwxrwxrwx 1 pi pi   28 okt 17 08:50 log.txt
-rwxrwxrwx 1 pi pi  167 okt 17 08:33 test.py
-rwxrwxrwx 1 pi pi  115 okt 17 07:45 test.pyc
drwxrwxrwx 2 pi pi 4096 okt 16 14:50 Video

我猜问题与 log.txt is not writeable when test.py is not writeable when test.py is not writeable when test.py is executed from command console 当执行恰好在 camProject 文件夹之外,因此也不是由 crontab 执行时。我不知道如何解决这个问题?

您的程序在当前工作目录中创建文件。 cron 个作业 运行 在调用用户的主目录中;因此,您的 cron 作业将文件写入 root 的主目录(Debian-based 平台上可能 /root)。

一旦您将文件创建为 root,它只能由 root 写入(除非您专门设置权限使其成为 world-writable,或将写入权限分配给特定用户组)

可能更改您的脚本以写入 /home/pi/log.txt(如果那是您想要文件的位置)并确保该文件已经存在,或者如果您在创建它之前切换到 pi 用户运行宁为 root。 (一旦文件存在并具有正确的所有者和权限,root 可以在不更改所有者或权限的情况下附加到它。)

切线地,没有必要在 cron 作业中使用 sudo 已经 运行 完全 root 权限。