Ho bisogno di eseguire un processo prima di accedere al sistema. Come eseguirlo come servizi? come faccio a fornire servizi in Linux?
In Ubuntu e Fedora? Il servizio è tomcat personalizzato
Ho bisogno di eseguire un processo prima di accedere al sistema. Come eseguirlo come servizi? come faccio a fornire servizi in Linux?
In Ubuntu e Fedora? Il servizio è tomcat personalizzato
Risposte:
Per eseguire un servizio senza o prima di accedere al sistema (ad esempio "all'avvio"), sarà necessario creare uno script di avvio e aggiungerlo alla sequenza di avvio.
Lo script di servizio contiene tre parti: avvio, arresto e riavvio.
La struttura di base di uno script di servizio è:
#!/bin/bash
#
RETVAL=0;
start() {
echo “Starting <Service>”
}
stop() {
echo “Stopping <Service>”
}
restart() {
stop
start
}
case “$1″ in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $”Usage: $0 {start|stop|restart}”
exit 1
esac
exit $RETVAL
Una volta modificato lo script a proprio piacimento, basta inserirlo in /etc/init.d/
E, aggiungerlo al processo di avvio del servizio di sistema (su Fedora, non sono un utente Ubuntu,> D):
chkconfig -add <ServiceName>
Il servizio verrà aggiunto al processo di avvio del sistema e non sarà necessario riavviarlo manualmente.
Saluti!
A seconda del sistema init, crei lo script init in modo diverso. Fedora ti offre upstart e systemd tra cui scegliere, e ovviamente compatibilità SysV.
/etc/init/custom-tomcat.conf
metti dentro:
start on stopped rc RUNLEVEL=3
respawn
exec /path/to/your/tomcat --and --parameters
E Tomcat dovrebbe avviarsi all'avvio del sistema.
/etc/systemd/system/custom-tomcat.service
metti dentro:
[Service]
ExecStart=/path/to/your/tomcat --and --parameters
Restart=always
[Install]
WantedBy=multi-user.target
e abilita il tuo servizio utilizzando systemctl enable custom-tomcat.service
. Verrà avviato ogni avvio normale.
Naturalmente ci sono alcune altre opzioni di configurazione per entrambi i sistemi init, puoi verificarli nella loro documentazione.
Tomcat è un servizio abbastanza comune, ti consiglio di guardare già lo script di init fornito dalla distribuzione. È probabile che funzioni con il tuo binario personalizzato, con poca o nessuna modifica.
Se hai un cron
demone, uno degli hook cron time predefiniti è @reboot
, che viene eseguito naturalmente all'avvio del sistema. Esegui crontab -e
per modificare il tuo crontab
file e aggiungi una riga:
@reboot /your/command/here
È possibile creare uno script più sofisticato, che consente di eseguire con le autorizzazioni di un utente specifico, come segue:
#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"
#Helper functions
start() {
start-stop-daemon --start --quiet --background --make-pidfile \
--pidfile /var/run/$NAME.pid --chuid $USERGROUP \
--exec /usr/local/bin/myservice
}
stop() {
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
--exec myservice --retry 30
}
case "$1" in
start)
echo -n "Starting $DESC: "
start
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
stop
echo "$NAME."
;;
restart)
echo -n "Restarting $DESC: "
#set +e
stop
#set -e
#sleep 1
start
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
Lo script va in /etc/init.d/myservice e si avvia il servizio eseguendo:
/etc/init.d/myservice start
Leggi la pagina man su start-stop-daemon per capire come funziona.
In Ubuntu o Debian come puoi usare, per aggiungere
update-rc.d your_service defaults
rimuovere
update-rc.d -f your_service remove
Ciao! \ o
è bello implementare lo stato delle funzioni e ricaricare forzatamente come compilatore LSB
service --status-all
nell'elenco?