J'utilise CentOS 7, mon objectif est de créer un cron toutes les cinq secondes, mais pendant mes recherches, nous ne pouvons utiliser cron que pendant une minute, donc ce que je fais maintenant, c'est que j'ai créé un fichier shell.
hit.sh
while sleep 5; do curl http://localhost/test.php; done
mais je l'ai frappé manuellement en faisant un clic droit dessus.
Ce que je veux, c'est créer un service pour ce fichier afin que je puisse le démarrer et l'arrêter automatiquement.
J'ai trouvé le script pour créer un service
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# 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
exit 0
Mais je ne sais pas quoi écrire dans les méthodes start ou stop J'ai essayé de placer le même contenu de hit.sh dans start(){}
mais cela a donné une erreur pour la }
méthode in stop.
/usr/bin/myscript
bien lorsque vous l'exécutez seul? Quelle est la sortieecho $?
lorsque le script a terminé une exécution? Est-ce 203?/usr/bin/myscript.sh
fonctionne très bien sur l'exécution via le terminal etecho$?
m'a donné1
Réponses:
Si vous souhaitez réutiliser votre exemple de code, il pourrait ressembler à:
Naturellement, le script que vous souhaitez exécuter en tant que service doit aller par exemple
/usr/local/bin/hit.sh
, et le code ci-dessus devrait aller/etc/init.d/hitservice
.Pour chaque niveau d'exécution nécessitant l'exécution de ce service, vous devrez créer un lien symbolique respectif. Par exemple, un lien symbolique nommé
/etc/init.d/rc5.d/S99hitservice
démarrera le service pour le niveau d'exécution 5. Bien sûr, vous pouvez toujours le démarrer et l'arrêter manuellement viaservice hitservice start
/service hitservice stop
la source
systemd
script, donc aucun suffixe n'est nécessaire. Vous devriez être capable d'exécuter d'anciens scriptssystemd
très bien. As-tu essayésystemctl enable hitservice
?Je crois que CentOS 7 et supérieur utilise systemd. Si tel est le cas pour votre système, essayez ce qui suit:
Placez les commandes de script que vous souhaitez exécuter
/usr/bin/myscript
.N'oubliez pas de rendre le script exécutable avec
chmod +x
.Créez le fichier suivant:
/etc/systemd/system/my.service
Rechargez tous les fichiers de service systemd:
systemctl daemon-reload
Vérifiez qu'il fonctionne en démarrant le service avec
systemctl start my
.Prime:
Pour tester le service systemd, il est possible de lancer un environnement tmux avec deux volets de fenêtre, où la fenêtre supérieure surveille la sortie du script (
stdout
etstderr
) et la fenêtre inférieure peut être utilisée pour redémarrer les services. Cela nécessitetmux
d'être installé, puis simplement:Redémarrez ensuite le service avec:
Quittez
tmux
avecctrl-d
puisctrl-c
.la source
Type=forking
. Il y a de fortes chances que le demandeur ait besoinType=simple
mais en général, le forking n'est pas recommandé: 0pointer.de/public/systemd-man/… . Les gens ont pris leurs anciens scripts d'initialisation et les ont enveloppéssystemd
pour que le démarrage de leur service se poursuivesystemd(init-script(service))
. Cependant, ilsystemd
remplace les scripts init, vous devez donc appeler le service directement avecsystemd
pour qu'il ressemblesystemd(service)
.Voici mon script en tant que service:
la source
Jetez un oeil à fpm. C'est un outil qui créera pour vous des scripts d'initialisation. Fonctionne sur de nombreuses plateformes (systemd, upstart, ect ..)
https://github.com/jordansissel/fpm
la source
Voir le projet Bash Service Manager : https://github.com/reduardo7/bash-service-manager
Exemple d'implémentation
Exemple d'utilisation
la source