Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/04/2017, à 15:59

migrec

Daemon basé sur un script via systemd

Bonjour,

Comment faire pour créer un daemon qui tourne dès le démarrage ?

J'ai un script Bash assez simple (on le lance sans argument et le reste est automatique) en cours d'écriture qui vérifie si un utilisateur est actif (utilisation de xprintidle). Pour l'instant, je le démarre à la main mais j'aimerais le lancer via systemd. Je n'ai pas trouvé d'équivalent à l'ancien /etc/init.d/skeleton.

J'ai bien lu https://doc.ubuntu-fr.org/creer_un_service_avec_systemd mais je ne m'y retrouve pas...

Hors ligne

#2 Le 24/04/2017, à 16:46

Hoper

Re : Daemon basé sur un script via systemd

Je manque de temps, alors je te fais une version courte, sans les explications. Copie le texte suivant dans un script shell, remplace les valeurs qu'il faut (voir à la fin) et lance le.

function Make_Service {
NAME=$1
SCRIPT_FILE=$2
AFTER=$3
REMAIN_AFTER_EXIT=$4
if [ -z "$4" ]; then REMAIN_AFTER_EXIT="yes"; fi
SERVICE_FILE="/etc/systemd/system/$1.service"
echo "[Unit]" >$SERVICE_FILE
echo "Description=Trivial service to run $SCRIPT_FILE" >>$SERVICE_FILE
echo "After=$AFTER" >>$SERVICE_FILE
echo "Requires=$AFTER" >>$SERVICE_FILE
echo "[Service]"  >>$SERVICE_FILE
if [ "$REMAIN_AFTER_EXIT" == "no" ]
then echo "Type=simple" >>$SERVICE_FILE;
else echo "Type=forking" >>$SERVICE_FILE; fi
echo "ExecStart=$SCRIPT_FILE" >>$SERVICE_FILE
echo "TimeoutSec=0" >>$SERVICE_FILE
echo "RemainAfterExit=$REMAIN_AFTER_EXIT" >>$SERVICE_FILE
echo "SysVStartPriority=99" >>$SERVICE_FILE
echo "RestartSec=5" >>$SERVICE_FILE
echo "Restart=on-failure" >>$SERVICE_FILE
echo "[Install]" >>$SERVICE_FILE
echo "WantedBy=multi-user.target" >>$SERVICE_FILE
chmod 755 $SCRIPT_FILE
systemctl -q enable $NAME
systemctl -q restart $NAME
}

Make_Service 'nom_du_service' '/home/moi/monscript.sh' ''

Remplace ce qu'il faut dans la dernière ligne. Ici la fonction est appelée avec trois arguments qui sont : Le nom que tu veux donner à ton service (qui ne fera que lancer ton script), le script a lancer, et la liste des services "dépendants" (pour faire en sorte que ce script ne soit lancé que si un autre est déjà lancé).

Je pourrai répondre à tes questions si tu en a mais plus tard. La je dois me sauver. A plus.

Dernière modification par Hoper (Le 24/04/2017, à 16:47)


Mes tutos et coups de gueule :
http://hoper.dnsalias.net/atdc/
Mastodon: @hoper@framapiaf.org

Hors ligne

#3 Le 24/04/2017, à 21:10

migrec

Re : Daemon basé sur un script via systemd

Parfait merci !

Mais après avoir lancé le service, je me suis rendu compte que ça ne fonctionnait pas mais mon script fait appel à xprintidle qui a besoin de X et d'un utilisateur. Donc ça ne fonctionnera pas en root dans un service... Je vais devoir lancer mon programme via KDE.

Hors ligne