Python 3.x crontab无法在重新启动时运行python脚本
我有一个raspberry pi zero,其中一个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
/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所在的文件夹中创建的。这是初学者常见的错误。也许读