Custom systemd Unit and Unit File: Difference between revisions
(15 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
* [[Systemd_Operations#Custom_systemd_Unit|systemd Operations]] | * [[Systemd_Operations#Custom_systemd_Unit|systemd Operations]] | ||
* [[Systemd_Concepts#Create_a_Custom_Unit_File_for_a_Service|systemd Concepts]] | * [[Systemd_Concepts#Create_a_Custom_Unit_File_for_a_Service|systemd Concepts]] | ||
* [[Minecraft]] | |||
=Overview= | =Overview= | ||
This article describes the procedure to configure an arbitrary service <code> | This article describes the procedure to configure an arbitrary service <code>minecraft</code> to be managed by <code>systemd</code>. It includes the creation of corresponding [[Systemd_Concepts#Unit_Files|unit file]] and <code>systemd</code> configuration to start and stop the service automatically at boot, respectively shutdown. | ||
=Create the Unit File= | =Create the Unit File= | ||
Create the <code>/etc/systemd/system/minecraft.service</code> unit file. As root: | |||
Create the < | <syntaxhighlight lang='bash'> | ||
touch /etc/systemd/system/minecraft.service | |||
< | chmod 644 /etc/systemd/system/minecraft.service | ||
touch /etc/systemd/system/ | </syntaxhighlight> | ||
chmod 644 /etc/systemd/system/ | For more details on the location of the unit files, see: {{Internal|Systemd_Concepts#Unit_File_Location|systemd Concepts | Unit File Location}} | ||
</ | |||
=Configure the Unit File= | =Configure the Unit File= | ||
==Process Started and Stopped by Auxiliary Scripts== | ==Process Started and Stopped by Auxiliary Scripts== | ||
This is common for Java programs, <code>/home/minecraft/minecraft-server/minecraft</code> is a wrapper script that starts the JVM and puts in background like this: | |||
< | <syntaxhighlight lang='bash'> | ||
java -server -jar ... > $(dirname $0)/logs/stdout-and-sterr.log 2>&1 & | |||
</syntaxhighlight> | |||
The unit file configuration is similar to: | |||
<syntaxhighlight lang='bash'> | |||
[Unit] | [Unit] | ||
Description= | Description=Minecraft service | ||
After=network.target | After=network.target | ||
[Service] | [Service] | ||
Type=oneshot | Type=oneshot | ||
ExecStart=/ | ExecStart=/home/minecraft/minecraft-server/minecraft start | ||
ExecStop=/ | ExecStop=/home/minecraft/minecraft-server/minecraft stop | ||
RemainAfterExit=yes | RemainAfterExit=yes | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</ | </syntaxhighlight> | ||
Also see: {{Internal|Systemd_Concepts#Type.3Doneshot|systemd Concepts | <tt>oneshot</tt>}} | |||
==Daemon Process that Forks and Creates Its Own PID File== | ==Daemon Process that Forks and Creates Its Own PID File== | ||
< | <syntaxhighlight lang='bash'> | ||
[Unit] | [Unit] | ||
Description=MyService | Description=MyService | ||
Line 51: | Line 54: | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</ | </syntaxhighlight> | ||
Also see: {{Internal|Systemd_Concepts#Type.3Dforking|Systemd Concepts | <tt>forking</tt>}} | |||
< | =Notify <tt>systemd</tt> of the Existence of the New Unit File= | ||
<syntaxhighlight lang='bash'> | |||
systemctl daemon-reload | systemctl daemon-reload | ||
</ | </syntaxhighlight> | ||
<font color=darkkhaki>Is this really necessary? Why exactly? At this point the file is completely unknown to the system, it as not enabled.</font> | |||
For more details on <code>daemon-reload</code> see: {{Internal|Systemd_Concepts#Daemon_Reload|systemd Concepts | Daemon Reload}} | |||
=Enable at Boot= | =Enable at Boot= | ||
<syntaxhighlight lang='bash'> | |||
< | systemctl enable minecraft.service | ||
systemctl enable | </syntaxhighlight> | ||
</ | <syntaxhighlight lang='bash'> | ||
Created symlink from /etc/systemd/system/multi-user.target.wants/minecraft.service to /etc/systemd/system/minecraft.service. | |||
</syntaxhighlight> | |||
=Exercise the Service= | =Exercise the Service= | ||
< | <syntaxhighlight lang='bash'> | ||
systemctl start | systemctl start minecraft | ||
systemctl status | systemctl status minecraft | ||
systemctl restart | systemctl restart minecraft | ||
systemctl stop | systemctl stop minecraft | ||
</ | </syntaxhighlight> |
Latest revision as of 03:03, 3 October 2023
Internal
Overview
This article describes the procedure to configure an arbitrary service minecraft
to be managed by systemd
. It includes the creation of corresponding unit file and systemd
configuration to start and stop the service automatically at boot, respectively shutdown.
Create the Unit File
Create the /etc/systemd/system/minecraft.service
unit file. As root:
touch /etc/systemd/system/minecraft.service
chmod 644 /etc/systemd/system/minecraft.service
For more details on the location of the unit files, see:
Configure the Unit File
Process Started and Stopped by Auxiliary Scripts
This is common for Java programs, /home/minecraft/minecraft-server/minecraft
is a wrapper script that starts the JVM and puts in background like this:
java -server -jar ... > $(dirname $0)/logs/stdout-and-sterr.log 2>&1 &
The unit file configuration is similar to:
[Unit]
Description=Minecraft service
After=network.target
[Service]
Type=oneshot
ExecStart=/home/minecraft/minecraft-server/minecraft start
ExecStop=/home/minecraft/minecraft-server/minecraft stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Also see:
Daemon Process that Forks and Creates Its Own PID File
[Unit]
Description=MyService
After=network.target
[Service]
ExecStart=/opt/myservice/bin/myservice
Type=forking
PIDFile=/var/run/myservice.pid
[Install]
WantedBy=multi-user.target
Also see:
Notify systemd of the Existence of the New Unit File
systemctl daemon-reload
Is this really necessary? Why exactly? At this point the file is completely unknown to the system, it as not enabled.
For more details on daemon-reload
see:
Enable at Boot
systemctl enable minecraft.service
Created symlink from /etc/systemd/system/multi-user.target.wants/minecraft.service to /etc/systemd/system/minecraft.service.
Exercise the Service
systemctl start minecraft
systemctl status minecraft
systemctl restart minecraft
systemctl stop minecraft