J'ai créé un script init.d super basique pour mon bot python:
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
echo "starting torbot"
python /home/ctote/dev/slackbots/torbot/torbot.py
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
Et définissez torbot.py
sur +x
et #!/usr/local/bin/python
en haut. Quand j'essaye de le démarrer, je reçois:
:/var/lock/subsys$ Sudo service torbot start Failed to start torbot.service: Unit torbot.service not found.
Est-ce que je manque quelque chose?
Si vous utilisez Ubuntu 16.04 ou une version plus récente, vous pouvez consulter la documentation de systemd à propos de création de fichiers de service
Le script concerne l'ancien système init et est géré par une couche de compatibilité héritée.
Pour moi, j'utilise Ubuntu 16.04.
Tout d'abord changer la fonction init
. /etc/init.d/functions
à
. /lib/lsb/init-functions
Ensuite, dans Shell, créez des liens symboliques de/etc/rc * vers mon script:
Sudo update-rc.d <myapp> defaults 95
Ok, j'ai essayé quelques étapes cette réponse stackoverflow ( Exécution du script upstart sur 17.04? ) et ils ont travaillé Mon env est comme suit
Tout d'abord, vous devez écrire un fichier foo.service.
[Unit]
Description=FooServer
[Service]
Restart=on-failure
WorkingDirectory=/path/to/your/working/directory/where the foo lives
ExecStart=/what/process/will call foo eg: in my case I used gunicorn app:app
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
La signification de chaque mot sur le côté gauche du signe '=' et de leur équivalent dans la version précédente est dans le lien https://wiki.ubuntu.com/SystemdForUpstartUsers
Une fois le fichier prêt, disons que vous le nommez 'foo.service' (l’extension .service est importante)
Vous devez placer le fichier dans /lib/systemd/system
Après quoi, vous devez activer le service en appelant
systemctl enable foo
Ce qui vous invitera à entrer votre mot de passe root car il créera des liens symboliques.
Si vous avez atteint jusqu'ici sans tracas, vous êtes bon. Votre service est donc créé Commencez par appeler
Sudo service foo start
systemctl status foo
pour voir le statut Sudo service foo stop
pour arrêter le service
Avez-vous fatigué quelque chose comme ça? Comment déboguer les scripts Upstart?
Pouvez-vous fournir les résultats de ce guide afin que nous puissions vous aider à potentiellement déboguer votre problème?