J'ai un script BASH que je veux exécuter au démarrage. Mon système exécute systemd, j'ai donc créé un fichier .service avec ce que je pense être les informations nécessaires:
[Unit]
Description=My Script
After=network.target
[Service]
ExecStart=/home/myscript.sh
[Install]
WantedBy=multi-user.target
J'ai utilisé systemctl enable pour «l'enregistrer» et le redémarrer. Au démarrage, on m'a dit que mon script serait exécuté, mais je ne pouvais voir aucun des messages qu'ECHO devrait afficher à l'écran ni écrire quelque chose dans un fichier, selon ce que j'avais écrit dans le script. De plus, il ne démarre pas l'application qu'il est censé démarrer.
L'état de Systemctl m'indique que le script s'est exécuté et s'est terminé avec succès. Pourtant, le script n'a aucun effet. Si je lance le script à partir d'un shell, cela fonctionne parfaitement bien.
Est-ce que l'un d'entre vous sait quel pourrait être mon problème?
Réponses:
En plus de ce que TokyoMEWS a trouvé par eux-mêmes ...
(ce qui n'est pas tout à fait correct -
Type=forking
ne devient nécessaire que si votre script se ferme pendant que ses enfants s'exécutent )... d'autres problèmes possibles sont:
Je suppose que par "affichage à l'écran", vous vouliez dire que le script écrit simplement quelque chose sur stdout. Cela ne va pas à l'écran pendant le démarrage - plutôt, tout depuis la sortie standard d'un service est envoyé au journal (ou à syslog selon votre version de systemd).
Si vous avez réellement essayer d' écriture à l'écran (par exemple à l' aide
echo Hi >/dev/tty1
), il est très probable que la sortie du script disparaît lorsque agetty efface l'écran avant d' afficher les invites de connexion. (Pour éviter cela, vous devrez commander l'unité[email protected]
).Pour écrire quelque chose dans un fichier, vous devez avoir le système de fichiers monté en lecture-écriture. Pour cela, cela
After=local-fs.target
peut être nécessaire, sinon l'unité peut être redémarrée trop tôt. Mais cela dépend de la configuration spécifique du système d'exploitation.la source
Si votre script définit également la clause ExecStop , vous devez définir " RemainAfterExit = yes" pour éviter que ExecStop soit appelé automatiquement après ExecStart . Cela permettra à votre service d'être dans l'état " actif " après avoir exécuté la commande ExecStart .
la source