Mam raspberry Pi zero z skryptem Pythona

/home/pi/Documents/camProject

Które pisze datę i godzinę do pliku 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)

Mogę zadzwonić i wykonać skrypt z konsoli, gdy stoję w folderze Camproject.

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

Chcę, aby ten test.py skrypt był uruchomiony na każdym ponownym uruchomieniu, więc z konsoli poleceń

sudo crontab -e

W dolnej części skryptu Crontab napisałem

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

Po ponownym uruchomieniu urządzenia Raspberry PI nic się nie stało, a data nie jest zapisywana w pliku LOG.TXT. Próbowałem wykonać

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

Z mojego katalogu domowego

/home/pi

I widzę wydruk z mojego testu.py w konsoli, ale log.txt nie jest aktualizowany. Jeśli jednak wykonuję ten sam skrypt z folderu, gdzie znajduje się test.py, wszystko działa dobrze. Potem sprawdziłem pozwolenie i w moim folderze 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

Myślę, że problem jest związany z log.txt nie jest napisany, gdy test.py jest wykonywany z konsoli poleceń, gdy wykonanie wydarzyło się poza folderem CAMPROYCT, a zatem nie przez Crontab. Nie wiem, jak rozwiązać ten problem?

0
jxw 17 październik 2020, 09:58

1 odpowiedź

Najlepsza odpowiedź

Twój program tworzy plik w bieżącym katalogu roboczym. cron zadania działają w katalogu domowym wywołującego użytkownika; Tak więc twoja praca Cron pisze plik w katalogu domowym {x1}} (probaby /root na platformach opartych na debian).

Po utworzeniu pliku jako root, jest to zapisywalne przez root (chyba że specjalnie ustawiasz uprawnienia, aby uczynić go światowym, lub przypisać dostęp do zapisu do określonej grupy użytkowników)

Prawdopodobnie zmień swój skrypt, aby napisać do /home/pi/log.txt (jeśli jest to miejsce, w którym chcesz plik) i upewnij się, że plik już istnieje, lub może przełączyć się na użytkownika pi przed utworzeniem, jeśli biegniesz jako {{{} X2}}. (Po wprowadzeniu pliku z właściwym właścicielem i uprawnieniami, root może do niego dołączyć, nie zmieniając właściciela lub uprawnień.)

Stylnetycznie nie ma potrzeby używania sudo w pracy cron, która jest już uruchomiona z przywilejami root.

0
tripleee 17 październik 2020, 15:19