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

时间:2020-10-17 06:58:12

标签: python-3.x linux cron debian cron-task

我有一个树莓派零,其中包含一个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"

重启树莓派设备后,什么也没发生,并且日期未写入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是不可写的,而该命令恰巧是在camProject文件夹之外执行的,因此从命令控制台执行test.py时也是如此,因此crontab也是如此。我不知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

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

根据需要,不必sudo在已经以全部cron特权运行的root作业中使用df['label'] = df['label'].str.replace(r'(\d)\s+',r'\1')