Začínam python skript pomocou cronu, ako je tento:
#Python script called every 3 minutes in case script crashes
*/3 * * * * /home/ubuntu/python_script.sh &
A môj skript má niekoľko výtlačkov na ladenie. Chcem tieto správy vytlačiť do súboru, napríklad /home/ubuntu/Logs.txt
Môj skript tiež skontroluje, či je volanie pythonu už spustené, takže ho nezačne znova:
#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)
if [ $lines -ne 2 ]; then
python python_script.py &
fi
Ako vytlačím svoje správy do tohto súboru? Používam python 2.7
Aktualizácia: Upravil som môj kód takto:
1) Toto som pridal ako prvý riadok môjho pythonového skriptu:
from __future__ import print_function
2) Súbor protokolu bol otvorený po poslednom importovaní a hneď po ňom bol pridaný testovací výtlačok:
log = open("/home/ubuntu/Logs.txt", "w+")
print("Testing...", file = log)
Ak ju jednoducho spustím z terminálu, vytlačí sa do súboru v poriadku. Ale ak to naplánujem pomocou cronu, nezapíše do súboru.
Aktualizácia 2: Nakoniec narazil na riešenie s príkazom "logger". Na môj shell skript som musel pridať "2> & 1" (v shell skripte, nie crontab, ako je popísané ElmoVanKielmo) a "| logger &". Konečné riešenie vyzerá takto:
#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)
if [ $lines -ne 2 ]; then
python python_script.py 2>&1 | logger &
fi
a vytlačí všetky výtlačky do súboru / var / log / syslog, čo je pre mňa dosť dobré.
odpovede:
12 pre odpoveď č. 1Do svojho crontab vložte toto:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt
Presmeruje stdout do tohto súboru.
Možno budete chcieť presmerovať stderr (výnimky atď.), Takže:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>> /home/ubuntu/errors.txt
Alebo ich môžete mať všetky v jednom súbore:
*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>&1