Estou usando o CentOS 7, meu objetivo é criar um cron a cada cinco segundos, mas, como pesquisei, podemos usar o cron apenas por um minuto, então o que estou fazendo agora é que criei um arquivo shell.
hit.sh
while sleep 5; do curl http://localhost/test.php; done
mas eu acertei manualmente clicando com o botão direito do mouse.
O que eu quero é criar um serviço para esse arquivo, para que eu possa iniciar e pará-lo automaticamente.
Encontrei o script para criar um serviço
#!/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
Mas eu não sei o que escrever nos métodos start ou stop. Tentei colocar o mesmo conteúdo do hit.sh, start(){}
mas deu erro }
no método in stop.
/usr/bin/myscript
funcionam bem quando você executá-lo em seu próprio país? Qual é o resultado deecho $?
quando o script concluiu uma execução? É 203?/usr/bin/myscript.sh
funciona bem em execução através do terminal eecho$?
me deu1
Respostas:
Se você deseja reutilizar seu exemplo de código, pode ser algo como:
Naturalmente, o script que você deseja executar como serviço deve ir para
/usr/local/bin/hit.sh
, por exemplo , e o código acima deve ir para/etc/init.d/hitservice
.Para cada nível de execução que precisa desse serviço, você precisará criar um respectivo link simbólico. Por exemplo, um link simbólico chamado
/etc/init.d/rc5.d/S99hitservice
iniciará o serviço para o nível de execução 5. Claro, você ainda pode iniciar e parar manualmente viaservice hitservice start
/service hitservice stop
fonte
systemd
script, portanto, nenhum sufixo é necessário. Você deve ser capaz de executar scripts antigossystemd
muito bem. Você já tentousystemctl enable hitservice
?Eu acredito que o CentOS 7 e acima usam systemd. Se for esse o caso do seu sistema, tente o seguinte:
Coloque os comandos de script que você deseja executar
/usr/bin/myscript
.Lembre-se de tornar o script executável com
chmod +x
.Crie o seguinte arquivo:
/etc/systemd/system/my.service
Recarregue todos os arquivos de serviço do systemd:
systemctl daemon-reload
Verifique se está funcionando iniciando o serviço
systemctl start my
.Bônus:
Para testar o serviço systemd, é possível ativar um ambiente tmux com dois painéis de janela, em que a janela superior monitora a saída do script (
stdout
estderr
) e a janela inferior pode ser usada para reiniciar os serviços. Isso requertmux
a instalação, e simplesmente:Em seguida, reinicie o serviço com:
Saia
tmux
comctrl-d
e depoisctrl-c
.fonte
Type=forking
. As chances são de que o solicitante precisaria,Type=simple
mas em geral a bifurcação não é recomendada: 0pointer.de/public/systemd-man/… . As pessoas pegaram seus scripts init antigos e os agruparamsystemd
para que a inicialização de seu serviço continuesystemd(init-script(service))
. No entanto,systemd
é um substituto para os scripts init, portanto, você deve ligar diretamentesystemd
para o serviço para que ele pareçasystemd(service)
.Este é o meu script como serviço:
fonte
Dê uma olhada no fpm. É uma ferramenta que criará scripts de inicialização para você. Funciona em várias plataformas (systemd, upstart, ect ..)
https://github.com/jordansissel/fpm
fonte
Consulte o projeto do Bash Service Manager : https://github.com/reduardo7/bash-service-manager
Exemplo de implementação
Exemplo de uso
fonte