Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Start python script with cron and output print to a file [duplicate]

Tags:

python

cron

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.

like image 799
Vini.g.fer Avatar asked Jul 25 '14 14:07

Vini.g.fer


1 Answers

In your crontab put this:

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

It will redirect stdout to this file.
You might also want to have stderr redirected (exceptions etc.), so:

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

Or you can have them all in one file:

*/3 * * * * /home/ubuntu/my_script.sh >> /home/ubuntu/Logs.txt 2>&1
like image 162
ElmoVanKielmo Avatar answered Nov 15 '22 06:11

ElmoVanKielmo