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.
- 253 megtekintés
Hozzászólások
A htop- ban nem látszik, hogy a teszt.py futna. Miért nem töltődik be ?
üdv: virtualm
- A hozzászóláshoz be kell jelentkezni
crontab-os futásnál ne óhajts user-interakciót...
- A hozzászóláshoz be kell jelentkezni
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).
- A hozzászóláshoz be kell jelentkezni
Szerintem a crontab bejegyzésben nem kell a "sudo -u pi".
Edit: Látom megelőztek... :)
“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”
― Philip K. Dick
- A hozzászóláshoz be kell jelentkezni
É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?
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Azért talán mégis jobb lenne egy logfájl. Hints: https://www.linuxquestions.org/questions/programming-9/frequently-repea…
- A hozzászóláshoz be kell jelentkezni
Ige, hasonlót műveltem, hogy lássam a hibákat, de nem volt hiba. Ezért bátorkidtam ide feldobni a problémám.
üdv: virtualm
- A hozzászóláshoz be kell jelentkezni
Az nagyon jó, hogy nem volt hiba, ettől függetlenül kellene keletkezzen egy logfájl a /tmp-ben.
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
Köszönöm a javaslatokat, megnézem, kipróbálom Őket.
üdv: virtualm
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni