Create own Linux service with systemd

Danang Priabada
2 min readJun 24, 2024

--

Artikel ini bertujuan untuk membagikan bagaimana cara membuat service systemd sederhana.

Service

Kita akan membuat server serderhana menggunakan PHP. Service ini akan listen di port UDP 10000, dan akan mengembalikan pesan apa pun yang diterima dengan transformasi ROT13:

<?php

// Create a UDP socket
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($sock === false) {
die("Failed to create socket: " . socket_strerror(socket_last_error()));
}

// Bind the socket to an address and port
if (!socket_bind($sock, '0.0.0.0', 10000)) {
die("Failed to bind socket: " . socket_strerror(socket_last_error($sock)));
}

while (true) {
// Initialize variables to avoid undefined variable warnings
$message = "";
$ip = "";
$port = 0;

// Receive data from a client
$bytes_received = socket_recvfrom($sock, $message, 1024, 0, $ip, $port);
if ($bytes_received === false) {
echo "Failed to receive data: " . socket_strerror(socket_last_error($sock)) . "\n";
continue;
}

// Process the message with ROT13
$reply = str_rot13($message);

// Send the reply back to the client
$bytes_sent = socket_sendto($sock, $reply, strlen($reply), 0, $ip, $port);
if ($bytes_sent === false) {
echo "Failed to send data: " . socket_strerror(socket_last_error($sock)) . "\n";
}
}

// Close the socket (This will never be reached in this infinite loop)
socket_close($sock);

?>

Kita coba jalankan service nya :

$ php server.php

Dan test di Terminal yang lain :

$ nc -u 127.0.0.1 10000
Hello, world!
Uryyb, jbeyq!

Sekarang kita ingin skrip ini berjalan sepanjang waktu, akan di restart jika terjadi kegagalan (unexpected exit), dan tetap berjalan setelah server booting. Di sinilah systemd berperan.

Turning it into a service

Kita perlu create satu file dengan nama/etc/systemd/system/rot13.service:

[Unit]
Description=ROT13 Demo Service
After=network.target
StartLimitBurst=5
StartLimitIntervalSec=10

[Service]
Type=simple
Restart=always
RestartSec=1
User=ubuntu-admin
ExecStart=/usr/bin/env php /path/to/server.php

[Install]
WantedBy=multi-user.target

Kita perlu menyesuaikan beberapa hal :

  • Ubah value dengan actual username setelah User=
  • Ubah value dengan proper path ke lokasi script setelahExecStart=

Sekarang kita bisa start service nya:

$ systemctl start rot13.service

Dan ini untuk membuat running otomatis pada saat boot:

$ systemctl enable rot13.service

Dan ini status dari service kita

$ systemctl status rot13.service
● rot13.service - ROT13 Demo Service
Loaded: loaded (/etc/systemd/system/rot13.service; disabled; preset: enabled)
Active: active (running) since Mon 2024-06-24 16:26:42 WIB; 23min ago
Main PID: 17988 (php)
Tasks: 1 (limit: 4558)
Memory: 4.3M (peak: 4.6M)
CPU: 63ms
CGroup: /system.slice/rot13.service
└─17988 php /home/ubuntu-admin/Temporary/server.php

Jun 24 16:26:42 admin systemd[1]: Started rot13.service - ROT13 Demo Service.

Resource : Creating a Linux service with systemd | by Benjamin Morel (Fixing the Sample Code)

--

--

Danang Priabada
Danang Priabada

Written by Danang Priabada

Red Hat and IBM Product Specialist | JPN : プリアバダ ダナン | CHN : 逹男 | linktr.ee/danangpriabada

No responses yet