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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With