/ / Uruchom skrypt Pythona z cronem i wypisz wydruk do pliku [duplikat] - python, cron

Uruchom skrypt Pythona z cronem i wydrukuj wydruk do pliku [duplicate] - python, cron

Zaczynam skrypt Pythona za pomocą crona, jak poniżej:

#Python script called every 3 minutes in case script crashes
*/3 * * * * /home/ubuntu/python_script.sh &

A mój skrypt ma kilka wydruków do debugowania. Chcę wydrukować te wiadomości w pliku, na przykład /home/ubuntu/Logs.txt

Mój skrypt sprawdza również, czy wywołanie Pythona jest już uruchomione, więc nie można go ponownie uruchomić:

#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)

if [ $lines -ne 2 ]; then
python python_script.py &
fi

Jak wydrukować moje wiadomości do tego pliku? Używam Pythona 2.7


Aktualizacja: Edytowałem mój kod w następujący sposób:

1) Dodano to jako pierwszy wiersz mojego skryptu python:

from __future__ import print_function

2) Otworzyłem plik dziennika po ostatnim imporcie, a zaraz potem dodałem wydruk testowy:

log = open("/home/ubuntu/Logs.txt", "w+")
print("Testing...", file = log)

Jeśli po prostu uruchomię go z terminala, zostanie wydrukowany do pliku w porządku. Ale jeśli zaplanuję to z cronem, nie zapisuje do pliku.


Aktualizacja 2: Ostatecznie natknąłem się na rozwiązanie za pomocą polecenia „logger”. W moim skrypcie powłoki musiałem dodać „2> i 1” (w skrypcie powłoki, a nie crontab, jak opisał ElmoVanKielmo) i „| logger &”. Ostateczne rozwiązanie wygląda następująco:

#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)

if [ $lines -ne 2 ]; then
python python_script.py 2>&1 | logger &
fi

i wypisuje wszelkie odbitki do pliku / var / log / syslog, co jest dla mnie wystarczająco dobre.

Odpowiedzi:

12 dla odpowiedzi № 1

W swoim crontabie umieść to:

*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt

Przekieruje standardowe wyjście do tego pliku.
Możesz również chcieć przekierować stderr (wyjątki itp.), Więc:

*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>> /home/ubuntu/errors.txt

Lub możesz mieć je wszystkie w jednym pliku:

*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>&1