/ / Стартирайте скрипта на python с cron и изведете печат във файл [дубликат] - python, cron

Стартирайте Python скрипта с cron и извеждайте отпечатък във файл [duplicate] - python, cron

Започвам скрипт на python с помощта на cron, като този:

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

И моят сценарий има няколко разпечатки за отстраняване на грешки. Искам да отпечатам тези съобщения във файл, например /home/ubuntu/Logs.txt

Моят скрипт също проверява дали python обаждането вече се изпълнява, така че няма да го стартирате отново:

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

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

Как да отпечатам съобщенията си в този файл? Използвам python 2.7


Актуализация: Редактирах кода си със следното:

1) Добавих това като първия ред на моя скрипт python:

from __future__ import print_function

2) Отваря журналния файл след последния импорт и веднага след това добавя пробен отпечатък:

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

Ако го пусна просто от терминала, той ще се отпечата на файла глоба. Но ако го планирам с cron, не пиша във файла.


Актуализация 2: Приключи препъването на решение с команда "logger". В моя скрипт с черупки трябваше да добавя "2> & 1" (в скрипта на обвивката, а не crontab, както е описано от ElmoVanKielmo) и "| logger &". Окончателното решение изглежда така:

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

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

и извежда всякакви разпечатки във / var / log / syslog файл, което е достатъчно добро за мен.

Отговори:

12 за отговор № 1

Във вашия crontab поставете това:

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

Той ще пренасочи stdout към този файл.
Можете също така да искате да сте пренасочили stderr (изключения и т.н.), така че:

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

Или можете да ги имате в един файл:

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