[ Megoldva ] crontab python teszt kimenet nem látszik

Fórumok

Sziasztok !

A crontab, boot alkalmával indit egy teszt_futtato.sh bash scriptet, ami egy python fájlt indít. A teszt.py kiirja, hogy fut és enterre vár, tehát mindaddig fut amíg entert nem nyomunk. A raspberry pi rasbian alatt a cron működik, de a python ( print ) kimenete nem látszik.

pi@raspberrypi:~ $ ps -ef | grep crond
pi        6554  5866  0 02:04 pts/0    00:00:00 grep --color=auto crond

Hibaüzenet sehol nincs és a kimenet nem látszik sehol, bármilyen opcióval is indítom a pit. Sem cli sem desktop gui alatt nincs kimenet.

crontab -l > https://pastebin.com/6Wt2mnZR

teszt_futtato.sh : https://pastebin.com/Wwn2kBkP

teszt.py : https://pastebin.com/PTAqLwKN

Mi a baj, mit csinálok rosszul, vagy mit nem csinálok meg amiért nem látszik a kimenet ?

[ Megoldva ]

A megoldások:

1- A háttérben futó alkalmazástól nem várok interaktivitást, helyette alkalmazás loggolás megy. ( crontab megértése )

2- A teszt_futtato.sh hibáinak javítása után megy minden.

3- Újra gondolt munkamenet javított a helyzeten. 
 

Hozzászólások

A htop- ban nem látszik, hogy a teszt.py futna. Miért nem töltődik be ?

üdv: virtualm

crontab-os futásnál ne óhajts user-interakciót...

Most nem egészen értem: a crontab -l kimenetet adod, ami az aktuális felhasználóhoz tartozik - akkor miért kell a sudo -u pi?

Meg szerintem egyszerűbb lenne, ha a /etc/crontab-ba (vagy cron.d-be) raknád, és a pi felhasználó nevében futtatnád (nem kell sudo).

Szerkesztve: 2021. 04. 21., sze – 09:41

Szerintem a crontab bejegyzésben nem kell a "sudo -u pi". 

Edit: Látom megelőztek... :)

Rendben, köszönöm az infókat.

üdv: virtualm

Én azt sem látom, hogy mi szükség van a wrapper shell scriptre? Illetve teszt nélkül azt mondanám, hogy a cron nem fog ttyt allokálni, az az input() fejre fog állni a pythonban. Meg egyébként sem értem, hogy ennek az egésznek mi értelme? Mire akarsz várni cronban?

Az csak a teszt miatt került oda, mert nem láttam a htop- ban, hogy fut e. A teszt az teszt, informál a körülményekről. Szoktam monitorra küldeni információkat, mert az gyorsan realizálható és szoktam log fájlt irni, de az macerásabb, lassabb és az SDcard nem szereti annyira mint a monitor. Igen amikor az ember nem ismer, nem ért valamit akkor irkál, hol ide, hol oda.

üdv: virtualm

 Igen amikor az ember nem ismer, nem ért valamit akkor irkál, hol ide, hol oda.

Nyugi, nem kötözködni akartam, csak innen nem látszik, hogy mi az, amivel már csak próbálkoztál, és mi az, amit el akarsz igazából érni. Innen egész úgy tűnt, mintha ez egy megoldás skeletonja lenne, és nem állt össze.

Ez esetben egyrészt egyszerűsítsd az egészet, lehet hívni a python direktben.

Másrészt a cron a kimenetet mailben küldi, ha nem konfoltad, akkor jó eséllyel a root user lokális, sose olvasott leveles ládájában senyved.

Harmadrészt ilyenkor a legjobb egy fileba írni, erre a pythonban nem kell nagyon erőlködni, kb egy jól irányzott (kopipaszte a logging tutorial tetejéről):

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')

... mert negyedrészt meg jó eséllyel tényleg az a baj, hogy az input() rendes shell hiányában egyébként behalt (és ennek akkor nyoma lesz levélben).

Illetve a cron is logol, azt is érdemes lenne nézni.

a cron az outputot mail-ben küldi.

/etc/rsyslog.conf-ban törold ki a #-et a "cron.*                          /var/log/cron.log" sor elől és kapsz némi infót (aztán rsyslog restart)