Difference between revisions of "Linux: SystemD"

From RHS Wiki
Jump to navigation Jump to search
Tag: visualeditor
Line 1: Line 1:
== List all running services ==
+
==List all running services==
 
  sytemctl
 
  sytemctl
 
  watch "ps -ef|grep service"
 
  watch "ps -ef|grep service"
  
== Start/stop or enable/disable services ==
+
==Start/stop or enable/disable services==
 
  systemctl start foo.service
 
  systemctl start foo.service
 
  systemctl stop foo.service
 
  systemctl stop foo.service
Line 10: Line 10:
 
  systemctl enable foo.service
 
  systemctl enable foo.service
 
  systemctl disable foo.service
 
  systemctl disable foo.service
== Check if service is enabled ==
+
==Check if service is enabled==
 
  systemctl is-enabled foo.service; echo $?
 
  systemctl is-enabled foo.service; echo $?
  
Line 16: Line 16:
 
[https://www.dynacont.net/documentation/linux/Useful_SystemD_commands/ Useful SystemD Commands]
 
[https://www.dynacont.net/documentation/linux/Useful_SystemD_commands/ Useful SystemD Commands]
  
== Log to syslog ==
+
==Log to syslog==
 
Use the following properties in your systemd service unit file:
 
Use the following properties in your systemd service unit file:
 
  StandardOutput=syslog
 
  StandardOutput=syslog
Line 26: Line 26:
 
  if $programname == '<your program identifier>' then ~
 
  if $programname == '<your program identifier>' then ~
  
== /etc/systemd/system/example.service ==
+
==/etc/systemd/system/example.service==
 
  <nowiki>[Unit]
 
  <nowiki>[Unit]
Description=Tenkaichi Vegeta-server (Tentacle)
+
Description=Tenkaichi Vegeta-server (Tentacle)
After=network.target
+
After=network.target
 
+
[Service]
+
[Service]
User=tenkaichi
+
User=tenkaichi
Group=tenkaichi
+
Group=tenkaichi
WorkingDirectory=/home/tenkaichi/vegetas-server
+
WorkingDirectory=/home/tenkaichi/vegetas-server
EnvironmentFile=/tenkaichi/vegeta-server/cfg/environment.cfg
+
EnvironmentFile=/tenkaichi/vegeta-server/cfg/environment.cfg
StandardOutput=syslog
+
StandardOutput=syslog
StandardError=syslog
+
StandardError=syslog
SyslogIdentifier=Vegeta-Tentacle
+
SyslogIdentifier=Vegeta-Tentacle
Restart=always
+
Restart=always
RestartSec=3
+
RestartSec=3
 +
 +
ExecStart=/usr/local/bin/tentacle_server -o -a ${SERVER_IP} -p ${PORT} -s ${INPUT_DIR} -v -m ${MAX_SIZE} \
 +
  -e ${SSL_CERT} -k ${SSL_CERTKEY}
 +
 +
[Install]
 +
WantedBy=multi-user.target
 +
</nowiki>
  
ExecStart=/usr/local/bin/tentacle_server -o -a ${SERVER_IP} -p ${PORT} -s ${INPUT_DIR} -v -m ${MAX_SIZE} \
+
==Automatic restart==
  -e ${SSL_CERT} -k ${SSL_CERTKEY}
 
 
 
[Install]
 
WantedBy=multi-user.target
 
</nowiki>
 
 
 
== Automatic restart ==
 
 
Add the following lines to your service file at Service block
 
Add the following lines to your service file at Service block
 
  [Service]
 
  [Service]
Line 57: Line 57:
 
  ...
 
  ...
  
== Wait Online ==
+
==Wait Online==
 
  <nowiki>[Unit]
 
  <nowiki>[Unit]
Wants=network-online.target
+
Wants=network-online.target
After=network.target network-online.target</nowiki>
+
After=network.target network-online.target</nowiki>
=== With NetworkManager ===
+
===With NetworkManager===
 
  systemctl enable NetworkManager-wait-online
 
  systemctl enable NetworkManager-wait-online
  
== Gunicorn ==
+
==ExecStart examples==
  ExecStart=/virtualenv/path/bin/gunicorn -w3 --timeout 300 --access-logfile /var/log/gunicorn/app-access.log --error-logfile /var/log/gunicorn/app-error.log --bind unix:/sockets/app-socket.sock App.wsgi
+
 
 +
====== Gunicorn ======
 +
ExecStart=/virtualenv/path/bin/gunicorn -w3 --timeout 300 --access-logfile /var/log/gunicorn/app-access.log --error-logfile /var/log/gunicorn/app-error.log --bind unix:/sockets/app-socket.sock App.wsgi
 +
 
 +
==== Flask (superset) ====
 +
<syntaxhighlight lang="text">
 +
ExecStart=/home/superset/.virtualenvs/superset/bin/gunicorn -w 3 -k gevent --timeout 120 -b unix:/home/superset/.superset/superset.sock --limit-request-line 0 --limit-request-field_size 0 --statsd-host localhost:8125 superset:app
 +
</syntaxhighlight>

Revision as of 11:27, 28 March 2019

List all running services

sytemctl
watch "ps -ef|grep service"

Start/stop or enable/disable services

systemctl start foo.service
systemctl stop foo.service
systemctl restart foo.service
systemctl status foo.service
systemctl enable foo.service
systemctl disable foo.service

Check if service is enabled

systemctl is-enabled foo.service; echo $?

Source: Useful SystemD Commands

Log to syslog

Use the following properties in your systemd service unit file:

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote

Then, assuming your distribution is using rsyslog to manage syslogs, create a file in /etc/rsyslog.d/<new_file>.conf with the following content:

if $programname == '<your program identifier>' then /path/to/log/file.log
if $programname == '<your program identifier>' then ~

/etc/systemd/system/example.service

[Unit]
 Description=Tenkaichi Vegeta-server (Tentacle)
 After=network.target
 
 [Service]
 User=tenkaichi
 Group=tenkaichi
 WorkingDirectory=/home/tenkaichi/vegetas-server
 EnvironmentFile=/tenkaichi/vegeta-server/cfg/environment.cfg
 StandardOutput=syslog
 StandardError=syslog
 SyslogIdentifier=Vegeta-Tentacle
 Restart=always
 RestartSec=3
 
 ExecStart=/usr/local/bin/tentacle_server -o -a ${SERVER_IP} -p ${PORT} -s ${INPUT_DIR} -v -m ${MAX_SIZE} \
   -e ${SSL_CERT} -k ${SSL_CERTKEY}
 
 [Install]
 WantedBy=multi-user.target
 

Automatic restart

Add the following lines to your service file at Service block

[Service]
...
Restart=always
RestartSec=3
...

Wait Online

[Unit]
 Wants=network-online.target
 After=network.target network-online.target

With NetworkManager

systemctl enable NetworkManager-wait-online

ExecStart examples

Gunicorn
ExecStart=/virtualenv/path/bin/gunicorn -w3 --timeout 300 --access-logfile /var/log/gunicorn/app-access.log --error-logfile /var/log/gunicorn/app-error.log --bind unix:/sockets/app-socket.sock App.wsgi

Flask (superset)

ExecStart=/home/superset/.virtualenvs/superset/bin/gunicorn -w 3 -k gevent --timeout 120 -b unix:/home/superset/.superset/superset.sock --limit-request-line 0 --limit-request-field_size 0 --statsd-host localhost:8125 superset:app