Il est aussi possible de personnaliser le démarrage (runlevel) des services avec le programme ci-dessous :
apt-get install sysv-rc-conf sysv-rc-conf
systemctl status
systemctl list-units [--type=target] systemctl list-unit-files systemctl --user list-utils # Quand on est avec un compte utilisateur
systemctl list-dependencies $SERVICE
systemctl [status|start|restart|stop] ssh.service
systemctl [enable|disable] ssh.service
systemctl --failed
udo systemctl mask $SERVICE
udo systemctl unmask $SERVICE
journalctl -f
journalctl _PID=100 journalctl /usr/sbin/sshd
systemd-cgtop -t
journalctl --since "2016-02-10 21:00:00" --until "2016-02-10 22:00:00"
systemd-analyze time
On peut obtenir une réponse tel que :
Startup finished in 3.289s (kernel) + 16.857s (userspace) = 20.146s
systemd-analyze plot > output.svg
systemd-analyze critical-chain
Voici notre script qui va simuler un service qui tournera en tache de fond. Ici il aura juste pour fonction d'écrire un fichier tout les 10 seconde dans le dossier /tmp/.
nano /usr/local/sbin/mon-service
#!/usr/bin/ruby Signal.trap(36) do puts "<1>Service tuée via SIGRTMIN+2 (emergency)..." sleep 2 `systemd-notify --status 'Service tuée via SIGRTMIN+2 (emergency)...'` exit(1) end `systemd-notify --status 'Chargement du service...'` # Faire quelque chose... sleep 2 puts "Service chargé" `systemd-notify --ready --status 'Service lancé!'` while(true) File.open('/tmp/mon-service.txt', 'w') do |ligne| ligne << "Le service a bien démarré! :)" end sleep 10 end
On applique les bon droits :
chmod a+rx /usr/local/sbin/mon-service
On configure le comportement du service à l'aide d'un fichier de configuration présent dans le dossier suivant :
nano /lib/systemd/system/mon-service.service
[Service] ExecStart=/usr/local/sbin/faked IgnoreSIGPIPE=false NotifyAccess=all Type=notify Restart=on-failure [Install] WantedBy=multi-user.target
On prend en compte ce nouveau service avec :
systemctl daemon-reload
Une fois fait, on peut démarrer le service ci-dessous :
systemctl start mon-service.service
Le code ci-dessus permet également de comprendre un seul signal qui peut être émis depuis le terminal. Mais avant, il faut connaître le PID du processus qui a lancé ce service. Cette commande permet de le connaître (ligne Main PID) :
systemctl status mon-service.service
● mon-service.service Loaded: loaded (/lib/systemd/system/mon-service.service; disabled; vendor preset: enabled) Active: active (running) since mar. 2017-03-14 22:50:03 CET; 11min ago Main PID: 25420 (mon-service) Status: "Service lancé!" Tasks: 2 (limit: 4915) CGroup: /system.slice/mon-service.service └─25420 /usr/bin/ruby /usr/local/sbin/mon-service mars 14 22:50:01 lubuntu-xmg systemd[1]: Starting mon-service.service... mars 14 22:50:03 lubuntu-xmg mon-service[25420]: Service chargé mars 14 22:50:03 lubuntu-xmg systemd[1]: Started mon-service.service.
Et ainsi faire :
kill -SIGRTMIN+2 25420
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers
Exemple d'unité côté utilisateur :