Converstion script init.d en systemd

Bonjour,

Je tente de convertir le script de démarrage sous systemd. Mais pas beaucoup de doc à ce sujet en français.

Ancien fichier :

!/bin/sh

USER=“teamspeak"
DIR=”/usr/local/teamspeak/teamspeak3-server_linux-x86"

case “$1” in
start)
su $USER -c “/usr/bin/exagear – ${DIR}/ts3server_startscript.sh start”
;;
stop)
su $USER -c “/usr/bin/exagear – ${DIR}/ts3server_startscript.sh stop”
;;
restart)
su $USER -c “/usr/bin/exagear – ${DIR}/ts3server_startscript.sh restart”
;;
status)
su $USER -c “/usr/bin/exagear – ${DIR}/ts3server_startscript.sh status”
;;
*)
echo “Usage: {start|stop|restart|status}” >&2
exit 1
;;
esac
exit 0

Nouveau :

[Unit]
Description=TeamSpeak 3 Server
After=network.target
[Service]
WorkingDirectory=/usr/local/teamspeak/teamspeak3-server_linux-x86/
User=teamspeak
Group=teamspeak
Type=forking
ExecStart=/usr/bin/exagear – /usr/local/teamspeak/teamspeak3-server_linux-x86/ts3server_startscript.sh start
ExecStop=/usr/bin/exagear – /usr/local/teamspeak/teamspeak3-server_linux-x86/ts3server_startscript.sh stop
ExecReload=/usr/bin/exagear – /usr/local/teamspeak/teamspeak3-server_linux-x86/ts3server_startscript.sh restart
PIDFile=/usr/local/teamspeak/teamspeak3-server_linux-x86/ts3server.pid
RestartSec=15
Restart=always
[Install]
WantedBy=multi-user.target

Une âme charitable peut me dire si la syntaxe est bonne?

Merci d’avance,
Alexis

je vais peut être dire des bêtises :stuck_out_tongue:
(précision inutile puisque je ne suis pas du tout informaticien :stuck_out_tongue:)

le script de base est appelé par “init” et on doit lui dire comment ça fonctionne (start/stop/…)

systemd connaît déjà les commandes start/stop/… donc tu n’as pas besoin de lui redonner

je me base sur cet exemple (lm-sensors)
le script init.d

#!/bin/sh

### BEGIN INIT INFO
# Provides:          lm-sensors
# Required-Start:    $remote_fs
# Required-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: lm-sensors
# Description:       hardware health monitoring
### END INIT INFO

. /lib/lsb/init-functions

[ -f /etc/default/rcS ] && . /etc/default/rcS
PATH=/bin:/usr/bin:/sbin:/usr/sbin
PROGRAM=/usr/bin/sensors

test -x $PROGRAM || exit 0

case "$1" in
  start)
    log_begin_msg "Setting sensors limits"
    if [ "$VERBOSE" = "no" ]; then
        /usr/bin/sensors -s 1> /dev/null 2> /dev/null
        /usr/bin/sensors 1> /dev/null 2> /dev/null
    else
        /usr/bin/sensors -s
        /usr/bin/sensors > /dev/null
    fi
    log_end_msg 0
    ;;
  stop)
    ;;
  force-reload|restart)
    $0 start
    ;;
  status)
    exit 0
    ;;
  *)
    log_success_msg "Usage: /etc/init.d/lm-sensors {start|stop|restart|force-reload|status}"
    exit 1
esac

exit 0

le service systemd (carément plus simple :wink:

[Unit]
Description=Initialize hardware monitoring sensors

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=-/usr/bin/sensors -s
ExecStart=-/usr/bin/sensors

[Install]
WantedBy=multi-user.target

après je ne connais pas /usr/bin/exagear ni le contenu de ts3server_startscript.sh

mais c’est intéressant comme démarche (pour mieux comprendre systemd) :slight_smile:

(re-précisions : c’est basé plus sur ma compréhension que sur de réelles connaissances :slight_smile:)

La Doc arch est bien faite

https://wiki.archlinux.fr/Systemd

Si le systemctl enable passe ça ira peut-être

bonjour,

tu peux t’inspirer des “paquets” archlinux puisqu’ils sont avec un fichier .service
ici ils utilisent 2 fichiers, le 2eme est un fichier environnement passé à la commande