Python 3.x crontab无法在重新启动时运行python脚本

Python 3.x crontab无法在重新启动时运行python脚本,python-3.x,linux,cron,debian,cron-task,Python 3.x,Linux,Cron,Debian,Cron Task,我有一个raspberry pi zero,其中一个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(n

我有一个raspberry pi zero,其中一个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不可写有关,当test.py恰好在camProject文件夹之外执行时,从命令控制台执行,因此也不是由crontab执行。我不知道如何解决这个问题?

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

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

可能将脚本更改为写入
/home/pi/log.txt(如果需要文件),并确保文件已存在,或者如果以
root
身份运行,则可能在创建文件之前切换到
pi
用户。(一旦文件具有正确的所有者和权限,
root
可以附加到该文件,而无需更改所有者或权限。)


切题地说,在
cron
作业中不需要使用
sudo
,该作业已以完全
root
权限运行。

/home/pi
中运行时,是否检查了
/home/pi/log.txt
是否存在?这解决了我的问题。我一直认为log.txt的it存储将与test.py的存储位置相关。很明显,有些事情我没有完全理解。正如您所预测的,log.txt文本是从我的crontab所在的文件夹中创建的。这是初学者常见的错误。也许读