Estoy usando CentOS 7, mi objetivo es crear un cron por cada cinco segundos, pero mientras investigaba, podemos usar cron solo por un minuto, así que lo que estoy haciendo ahora es crear un archivo shell.
hit.sh
while sleep 5; do curl http://localhost/test.php; done
pero lo golpeé manualmente haciendo clic derecho sobre él.
Lo que quiero es crear un servicio para ese archivo para que pueda iniciarlo y detenerlo automáticamente.
Encontré el script para crear un servicio
#!/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
Pero no sé qué escribir en los métodos de inicio o detención Intenté colocar el mismo contenido de hit.sh start(){}
pero me dio un error }
en el método de detención.
/usr/bin/myscript
Funciona bien cuando lo ejecuta solo? ¿Cuál es el resultado deecho $?
cuando el script ha completado una ejecución? ¿Es 203?/usr/bin/myscript.sh
funciona bien en la ejecución a través del terminal yecho$?
me dio1
Respuestas:
Si desea reutilizar su muestra de código, podría verse así:
Naturalmente, la secuencia de comandos que desea ejecutar como servicio debe ir, por ejemplo
/usr/local/bin/hit.sh
, y el código anterior debe ir a/etc/init.d/hitservice
.Para cada nivel de ejecución que necesite ejecutar este servicio, deberá crear un enlace simbólico respectivo. Por ejemplo, un enlace simbólico llamado
/etc/init.d/rc5.d/S99hitservice
iniciará el servicio para el nivel de ejecución 5. Por supuesto, aún puede iniciarlo y detenerlo manualmente a través deservice hitservice start
/service hitservice stop
fuente
systemd
script, por lo tanto, no se necesita sufijo. Sinsystemd
embargo, deberías poder ejecutar scripts antiguos con muy bien. ¿Lo has intentadosystemctl enable hitservice
?Creo que CentOS 7 y superior usa systemd. Si ese es el caso de su sistema, intente lo siguiente:
Coloque los comandos de script en los que desea ejecutar
/usr/bin/myscript
.Recuerde hacer que el script sea ejecutable con
chmod +x
.Crea el siguiente archivo:
/etc/systemd/system/my.service
Vuelva a cargar todos los archivos de servicio systemd:
systemctl daemon-reload
Compruebe que está funcionando iniciando el servicio con
systemctl start my
.Prima:
Para probar el servicio systemd, es posible iniciar un entorno tmux con dos paneles de ventanas, donde la ventana superior monitorea la salida del script (
stdout
ystderr
) y la ventana inferior se puede usar para reiniciar los servicios. Esto requieretmux
ser instalado, luego simplemente:Luego reinicie el servicio con:
Salir
tmux
conctrl-d
y luegoctrl-c
.fuente
Type=forking
. Es probable que el autor de la pregunta necesite,Type=simple
pero en general no se recomienda bifurcar : 0pointer.de/public/systemd-man/… . La gente ha estado tomando sus viejos guiones de inicio y envolviéndolossystemd
para que se inicie su serviciosystemd(init-script(service))
. Sin embargo,systemd
es un reemplazo para los scripts de inicio, por lo que debe llamar al servicio directamentesystemd
para que se vea asísystemd(service)
.Este es mi script como servicio:
fuente
Echa un vistazo a fpm. Es una herramienta que creará scripts de inicio para usted. Funciona en muchas plataformas (systemd, upstart, ect ..)
https://github.com/jordansissel/fpm
fuente
Vea el proyecto Bash Service Manager : https://github.com/reduardo7/bash-service-manager
Ejemplo de implementación
Ejemplo de uso
fuente