I run my python script as a systemd service, it is defined in the following .service
file:
[Unit]
Description=MyService
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/username/projects/website_notifier/run_service.py
[Install]
After=multi-user.target
In my run_service.py file I then log output using the logging module:
import logging
logging.basicConfig(filename=settings['log_file_name'], level=logging.INFO)
logging.info("Starting notifier service at " + str(datetime.utcnow()))
The issue is that this information is not being logged to my log file when I run I start my file through systemctl
Now, I know that generally systemd gets output to journalctl, I don't want this. I want to be able to access this log through another script that does not run with administrator priviliges.
How can I make this happen?
I've since switched to using Loguru for logging and it seems far more intuitive and useable.
Also, adding the following to .service
file makes sure the logging is not buffered and is real time:
[Service]
Environment=PYTHONUNBUFFERED=1
First check that your service is running at all: systemctl status MyService
should show you an errors.
After
goes in [Unit]
section, not in [Install]
.
Once I fixed that your script worked for me. Other things to check:
I would recommend just logging to stdout, to the journal, so that you don't have to worry about rotating the log file, how much space it takes, etc. Also journalctl
is really nice for querying logs. You should be able to access the journal as non-root, either as same user as the script, or by being in group systemd-journal
.
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