BLOG

systemd servis dosyası - açılışta servis başlat

226

systemd üzerine yazılmış bir çok kaynak var. Bu da onlardan birisi fakat benim server'ımda bu şekilde sonuç aldım. Hazırsanız kısa bir bilgilendirmeden sonra systemd kullanımına başlayalım.

Nedir bu systemd veya uzun adı ile system deamon ?

Linux sistemlerin açılışında sistemin bize sunacağı hizmetleri kontrol eden yapıdan sorumlu yapıya systemd deniliyor. Sistem boot edildiğinde belirlenen servisler kullanıcıların yetki seviyelerine göre PID (Process ID) kimlikleri ile servis ediliyor. Sistem yöneticisi root server üzerinde hangi işin hangi kullanıcıya ait oldugunu ne kadar zamandır aktif olduğu gibi bilgilere ulaşabiliyor.

Çalıştığım şirkette micro service mimarisine uymaya çalışarak nodejs modülleri geliştiriyorum. Bu modüller multi-task ve event-driven bir yapıda çalışmaktalar. Böylece proje gelişip büyüdükçe bakımı ve kontrolü geliştirici tarafından kolaylaşacağını ön görüyorum. Lafı daha fazla uzatmadan anlatıma geçelim.

Yeni bir terminal penceresi açıyoruz ve çalışmak istediğiniz server'a giriş sağlayın. aşağıda belirtilen yolda favori editörünüzle yeni bir .service dosyası açıyoruz. Ben nano tercih ediyorum. vi veya farklı text editörler deneyebilirsiniz.

sudo nano /lib/systemd/system/node-device.service
[Unit]
Description=nodejs - micro service device.js
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/nodejs-mqtt
ExecStart=/root/.nvm/versions/node/v8.11.3/bin/node /root/nodejs-mqtt/device.js
Restart=always
RestartSec=10
# Output to syslog
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodejs-device
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

node-device.service dosyasına yukarıdaki satırları ekleyip, sisteminiz için gerekli düzenlemeleri yapın ve kaydedin. Bu işlemden sonra system deamon'un yeni eklenen servisi reboot etmeden görebilmesi için aşağıdaki komutu ve sırası ile restart ve status komutlarını çalıştırıyoruz.

systemctl daemon-reload
systemctl restart node-device
systemctl status node-device
root@orangepipcplus:~# systemctl status node-device
● node-device.service - nodejs - micro service device.js
   Loaded: loaded (/lib/systemd/system/node-device.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-07-16 15:44:12 +03; 1h 41min ago
 Main PID: 680 (node)
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/node-device.service
           └─680 /root/.nvm/versions/node/v8.11.3/bin/node /root/nodejs-mqtt/device.js

Jul 16 17:25:34 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:36 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:38 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:40 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:42 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:44 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:46 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:48 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:50 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
Jul 16 17:25:52 orangepipcplus nodejs-device[680]: 5e:cf:7f:1c:7c:ac device heartbeat updated
root@orangepipcplus:~#

Ekran çıktısında servis hatasız şekilde yapılandırılmışsa active (running) yeşil şekilde görünür. Buraya kadar doğru ilerledi iseniz tebrikler. 

Bazı durumlarda server boot edildiğinde servisiniz çalışmayabilir. Bunun için de symlink oluşturması için enable komutunu çalıştırıyoruz.

systemctl enable node-device

Tek bir micro service ve tekli modül için anlatacaklarım bu kadar. Bu örneği referans alarak istediğiniz kadar servis ekleyebilirsiniz.


Tüm Linux dağıtımlarında aktif olan tüm servisleri şu komut ile listeleyebilirsiniz.

service --status-all
Kaynaklar:

https://blog.cavebeat.org/2017/07/systemd-service-file-start-service-on-boot/

https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/

https://github.com/xwiki-labs/cryptpad/issues/62

https://askubuntu.com/questions/676007/how-do-i-make-my-systemd-service-run-via-specific-user-and-start-on-boot

http://www.devdungeon.com/content/creating-systemd-service-files

https://www.axllent.org/docs/view/nodejs-service-with-systemd/