/ / Spustite python skript s cron a výstup vytlačte do súboru [duplikát] - python, cron

Spustiť pythonový skript s cronom a výstupnou tlačou do súboru [duplicate] - python, cron

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ď č. 1

Do 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