Започвам скрипт на 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