Tuesday 20 August 2019

Start python script with cron and output print to a file

I'm starting a python script using cron, like this:




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


And my script has several prints for debugging. I want to print those messages into a file, for example /home/ubuntu/Logs.txt



My script also check if the python call is already running so it won't start it again:



#!/bin/bash

lines=$(ps -ef | grep python_script.py | wc -l)

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


How do I print my messages to this file? I'm using python 2.7







Update: Edited my code with the following:



1) Added this as the first line of my python script:



from __future__ import print_function


2) Opened the log file after the last import, and right after that added a test print:




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


If I simple run it from the terminal, it prints to the file fine. But if I schedule it with cron it doesn't write to the file.






Update 2: Ended up stumbling on a solution with "logger" command. On my shell script I had to add "2>&1" (in the shell script, not crontab as described by ElmoVanKielmo) and " | logger &". Final solution looks like this:




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

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


and it outputs any prints to /var/log/syslog file, which is good enough for me.

No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...