A nice feature of systemd is the scripts could be daemonized without any modifications of the scripts like standard stdin, stdout, stderr to be redirected to null (and even in some languages is not that simple!).
So if you want to run your ordinary script as daemon under a systemd linux distro, create a systemd service file in
/etc/systemd/system/myscript.service
Replace “myscript” with the nme of your script.
[Install] WantedBy=multi-user.target [Unit] Description=<my_script_description> After=syslog.target After=network.target [Service] Type=simple User=<run_as_user> Group=<run_as_group_group> ExecStart=<your_path_and_script_name_here> # Give the script some time to startup TimeoutSec=300 #EnvironmentFile=/etc/<filename> [Install] WantedBy=multi-user.target
So change the following according your needs:
- <my_script_description> – description of your script/program with couple of words
- <run_as_user> – the user under which will be executed
- <run_as_group_group> – the group under which will be executed
- <your_path_and_script_name_here> – the absolute path and filename to the script or program to be executed
- Uncomment “EnvironmentFile” line if you would like to have different environment file for your script
And then you can run it with
systemctl start myscript
And you can enable it to start at boot
systemctl enable myscript
And also you can see the output of the script on syslog or with
systemctl status myscript
Here is an example of running a python script as a daemon with systemd.
The python script is
/usr/local/bin/mypythonscript.py
and the service name is
/etc/systemd/system/mypythonscript.service
Description=My python script daemon After=syslog.target After=network.target [Service] Type=simple User=root Group=root ExecStart=/usr/bin/python /usr/local/bin/mypythonscript.py # Give the script some time to startup TimeoutSec=300 [Install] WantedBy=multi-user.target
And you can see handful of information for the state of your script with
systemctl status mypythonscript
The uptime of your script and output if any
* mypythonscript.service Loaded: loaded (/etc/systemd/system/mypythonscript.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2018-01-04 13:58:34 UTC; 1 months 12 days ago Main PID: 29654 (python) CGroup: /system.slice/mypythonscript.service `-37421 /usr/bin/python /usr/local/bin/mypythonscript.py Jan 12 10:05:21 srv.local systemd[1]: [/etc/systemd/system/mypythonscript.service:3] Assignment outside of section. Ignoring. Jan 12 10:05:21 srv.local systemd[1]: [/etc/systemd/system/mypythonscript.service:1] Assignment outside of section. Ignoring.