How to run rqlite as a service? - linux

Can rqlite run as a Linux service? so it can be start/stop/restart with systemctl command. Any example of the service file would be appreciated.

A basic systemd service file with ExecStart set to your rqlited command should suffice. See example below.
A more thorough service file can be found in the very good Arch User Repo package of rqlite.
It also includes creation of rqlite system user and directory and more security considerations.
Information on how to form a cluster with rqlite started as a service can be found on XenGi, the packager's page. It makes use of an environment file that sets the arguments of rqlite nodes.
[Unit]
Description=
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/rqlited -http-addr 0.0.0.0:4001 -raft-addr 0.0.0.0:4002 /path/to/datadir
User=youruser
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGTERM
Restart=always
[Install]
WantedBy=multi-user.target

Related

Add dependency between two systemd services to start again if one of them is killed

I have two systemd services A.service and B.service in /etc/systemd/system/ directory.
Below is the configuration in A.service
[Unit]
Description=A Service
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/opt/myapp/A_service.sh -a start
ExecStop=/opt/myapp/A_service.sh -a stop
[Install]
WantedBy=multi-user.target
Below is the configuration in B.service
[Unit]
Description=B Service
After=A.service
BindsTo=A.service
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/opt/myapp/B_service.sh -a start
ExecStop=/opt/myapp/B_service.sh -a stop
[Install]
WantedBy=multi-user.target
I want to create a dependency such that when A.service gets restarted B.service should also get restarted.
But it's not working when i kill A.service with sudo kill -9 <A.service pid>.
I can see A.service getting restarted after kill but B.service is in stopped state, not getting restarted.
Can someone help me configure this dependency?
Thanks in Advance.
You want to use the PartOf dependency.
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#PartOf=
PartOf=
Configures dependencies similar to Requires=, but limited to stopping and restarting of units. When systemd stops or restarts the units listed here, the action is propagated to this unit. Note that this is a one-way dependency — changes to this unit do not affect the listed units.
When PartOf=b.service is used on a.service, this dependency will show as ConsistsOf=a.service in property listing of b.service. ConsistsOf= dependency cannot be specified directly.
Description=B Service
After=A.service
BindsTo=A.service
PartOf=A.service
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/opt/myapp/B_service.sh -a start
ExecStop=/opt/myapp/B_service.sh -a stop
[Install]
WantedBy=multi-user.target

Do you know how to make the system automatically restart daemon service?

I have made a daemon service in linux server. It is running well. The service file is
stargate.service (in /etc/systemd/system).
[Unit]
Description=stargate
[Service]
Type=simple
PIDFile=/app/stargate/stargate.pid
ExecStart=/app/stargate/stargate.sh start
ExecReload=/app/stargate/stargate.sh restart
ExecStop=/app/stargate/stargate.sh stop
[Install]
Alias=stargate
WantedBy=default.target
If by some reasons, the daemon service is die and stop. Do you know how to make the system automatically restart the daemon service ?
How to make the daemon service starts if server get rebooted?
To respawn your service when it fails, add the following to the [Service] block:
[Service]
Restart=on-failure
RestartSec=3
If you wish to always restart when your service is killed use Restart=always
The RestartSec value is the delay between restart attempts.
See more info here: https://www.freedesktop.org/software/systemd/man/systemd.service.html

Auto-starting Twonky Server on Ubuntu 18.04 using systemd

I was trying to set up a Twonky Server on Ubuntu. The server works fine, but I could not get systemd to autostart the server (using a service file I created at /etc/systemd/system/twonkyserver.service). Sometimes I got the cryptic error message that some PID-file (/var/run/mediaserver.pid) is not accessible, the exit code of the service is 13, which apparently is a EACCES Permission denied error . The service runs as root.
I finally managed to fix the problem by setting PIDFile in the twonkyserver.service file to /var/run/mediaserver.pid. For reference, find the service file below:
[Unit]
Description=Twonky Server Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/twonky/twonky.sh start
ExecStop=/usr/local/twonky/twonky.sh stop
ExecReload=/usr/local/twonky/twonky.sh reload
ExecRestart=/usr/local/twonky/twonky.sh restart
PIDFile=/var/run/mediaserver.pid
Restart=on-failure
[Install]
WantedBy=multi-user.target
As described above, the below service file auto-starts the Twonky Server on boot. Simply create it using vim /etc/systemd/system/twonkyserver.service. This assumses that you have installed the Twonky Server to usr/local/twonky. The shell-file twonky.sh already provides a nice interface to the service file (twonky.sh start|stop|reload|restart, also see twonky.sh -h).
[Unit]
Description=Twonky Server Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/twonky/twonky.sh start
ExecStop=/usr/local/twonky/twonky.sh stop
ExecReload=/usr/local/twonky/twonky.sh reload
ExecRestart=/usr/local/twonky/twonky.sh restart
PIDFile=/var/run/mediaserver.pid
Restart=on-failure
[Install]
WantedBy=multi-user.target
I would slightly amend the start and stop commands from twonky.sh and put them directly into the twonky.service file for systemd:
[Unit]
Description=Twonky Server Service
After=network.target
[Service]
Type=simple
#Systemd will ensure RuntimeDirectory for the PID file is created under /var/run
RuntimeDirectory=twonky
PIDFile=/var/run/twonky/mediaserver.pid
# use the -mspid argument for twonkystarter to put the pid file in the right place
ExecStart=/usr/local/twonky/twonkystarter -mspid /var/run/twonky/mediaserver.pid -inifile /usr/local/twonky/twonkyserver.ini -logfile /usr/local/twonky/twonky.log -appdata /usr/local/twonky
ExecStop=kill -s TERM $MAINPID
ExecStopPost=-killall -s TERM twonkystarter
ExecStopPost=-killall -s TERM twonky
# Twonky 8.5.1 doesn't reload, it stops instead (on arm at least)
# ExecReload=kill -s HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
You need to be sure the paths in the ExecStart command match where you unpacked twonky, and also where you want the .pid file, configuration, logfile and runtime appdataunless you are happy with their default locations.
After putting that all into/etc/systemd/system/twonky.server, run
sudo systemctl daemon-reload
sudo systemctl start twonky
sudo systemctl enable twonky

Daemon service in systemd

I have managed to install daemon service in /etc/systemd/system, however I am not sure about 2 things:
Whether the daemon services should reside there
How can I elegantly check whether a daemon service is installed or not in systemd?
1.If the daemon services should reside there
yes, it is the .service location. The file that you should put here is:
mydeamon.service
[Unit]
Description=ROT13 demo service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=**YourUser**
ExecStart=**pathToYourScript**
[Install]
WantedBy=multi-user.target
You’ll need to:
set your actual username after User=
set the proper path to your script in ExecStart= (usually /usr/bin/ You can put your script here)
creating-a-linux-service-with-systemd
2.How can I elegantly check if a daemon service is installed or not in systemd?
systemctl has an is-active subcommand for this:
systemctl is-active --quiet service
will exit with status zero if service is active, non-zero otherwise, making it ideal for scripts:
systemctl is-active --quiet service && echo Service is running
test Service is running

Shell Script Spawned From systemd Node App Doesn't Edit etc File

I have a systemd service that starts a Node app on boot. The Node app uses child_process.spawnSync to launch a shell script that edits /etc/wpa_supplicant/wpa_cli-actions.sh using sed.
The wpa_cli-actions.sh file is edited correctly if I launch the Node app manually from the command line, but is not edited correctly when the app is launched by systemd. My systemd service file is based on another one that launches a similar service, so I'm not sure what I'm doing wrong. I haven't seen any errors related to this in the journalctl output. Below is my service file.
[Unit]
Description=The Edison status and configuration service
After=mdns.service
[Service]
ExecStart=/bin/su root -c 'node /usr/lib/config-server/app.js'
Restart=always
RestartSec=10s
StandardOutput=journal
StandardError=journal
SyslogIdentifier=edison-config
PrivateTmp=no
Environment=NODE_ENV=production
User=root
Group=root
[Install]
WantedBy=default.target
Try The following, And root is enabled by default if you don't specify User or Group, replace entire <path to node> with your path to node, it can be found with which node.
[Unit]
Description=The Edison status and configuration service
After=mdns.service
[Service]
ExecStart=<path to node> /usr/lib/config-server/app.js
WorkingDirectory=/usr/lib/config-server
Restart=always
RestartSec=10s
StandardOutput=journal
StandardError=journal
SyslogIdentifier=edison-config
PrivateTmp=no
Environment=NODE_ENV=production
[Install]
WantedBy=default.target

Resources