Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log Python Systemd output to log file

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?

like image 824
freefall Avatar asked Nov 21 '18 23:11

freefall


2 Answers

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

like image 168
freefall Avatar answered Oct 02 '22 07:10

freefall


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:

  • Is the log file path an absolute path?
  • Does the user starting the service have permissions to write there?

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.

like image 37
Graham King Avatar answered Oct 02 '22 06:10

Graham King