Ich muss einen Prozess ausführen, bevor ich mich beim System anmelden kann. Wie führe ich es wie Dienste aus? Wie mache ich Dienste in Linux?
In Ubuntu und Fedora? Der Service ist maßgeschneiderte Kater
Ich muss einen Prozess ausführen, bevor ich mich beim System anmelden kann. Wie führe ich es wie Dienste aus? Wie mache ich Dienste in Linux?
In Ubuntu und Fedora? Der Service ist maßgeschneiderte Kater
Antworten:
Um einen Dienst ohne oder vor dem Anmelden am System auszuführen (dh "beim Booten"), müssen Sie ein Startskript erstellen und es der Bootsequenz hinzufügen.
Ein Dienstskript besteht aus drei Teilen: Starten, Stoppen und Neustarten.
Die Grundstruktur eines Service-Skripts lautet:
#!/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
Sobald Sie das Skript nach Ihren Wünschen angepasst haben
, platzieren Sie es einfach in /etc/init.d/. Fügen Sie es dem Systemdienst-Startprozess hinzu (unter Fedora bin ich kein Ubuntu-Benutzer,> D):
chkconfig -add <ServiceName>
Der Dienst wird dem Systemstartprozess hinzugefügt, und Sie müssen ihn nicht erneut manuell starten.
Prost!
Abhängig vom Init-System erstellen Sie das Init-Skript unterschiedlich. Mit Fedora haben Sie die Wahl zwischen Upstart und System und natürlich der SysV-Kompatibilität.
/etc/init/custom-tomcat.conf
reintun:
start on stopped rc RUNLEVEL=3
respawn
exec /path/to/your/tomcat --and --parameters
Und Ihr Tomcat sollte beim Systemstart starten.
/etc/systemd/system/custom-tomcat.service
reintun:
[Service]
ExecStart=/path/to/your/tomcat --and --parameters
Restart=always
[Install]
WantedBy=multi-user.target
und aktivieren Sie Ihren Dienst mit systemctl enable custom-tomcat.service
. Es wird bei jedem normalen Bootvorgang gestartet.
Natürlich gibt es für beide init-Systeme nur noch wenige Konfigurationsmöglichkeiten, diese können Sie in der Dokumentation nachlesen.
Tomcat ist ein ziemlich verbreiteter Dienst, ich würde empfehlen, das von der Distribution bereitgestellte Init-Skript zu lesen. Wahrscheinlich funktioniert es mit Ihrer angepassten Binärdatei, ohne dass es zu Änderungen kommt.
Wenn Sie einen cron
Daemon haben, ist einer der vordefinierten Cron-Time-Hooks @reboot
, der natürlich beim Systemstart ausgeführt wird. Führen crontab -e
Sie crontab
Folgendes aus, um Ihre Datei zu bearbeiten und eine Zeile hinzuzufügen:
@reboot /your/command/here
Sie können ein komplexeres Skript erstellen, mit dem Sie unter den Berechtigungen eines bestimmten Benutzers wie folgt ausführen können:
#!/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
Das Skript befindet sich in /etc/init.d/myservice und Sie starten den Dienst, indem Sie Folgendes ausführen:
/etc/init.d/myservice start
Lesen Sie die Manpage zu start-stop-daemon, um zu verstehen, wie es funktioniert.
In Ubuntu oder Debian können Sie wie gewohnt hinzufügen
update-rc.d your_service defaults
zu entfernen
update-rc.d -f your_service remove
Tschüss! \O
Es ist schön, die Funktionen status und force -reload zu implementieren, um LSB-kompatibel zu sein
service --status-all
Liste anzeigen lassen ?