Ich verwende CentOS 7. Mein Ziel ist es, alle fünf Sekunden ein Cron zu erstellen. Als ich jedoch recherchierte, können wir Cron nur für eine Minute verwenden. Was ich jetzt tue, ist, dass ich eine Shell-Datei erstellt habe.
hit.sh
while sleep 5; do curl http://localhost/test.php; done
aber ich habe es manuell durch Rechtsklick getroffen.
Ich möchte einen Dienst für diese Datei erstellen, damit ich sie automatisch starten und stoppen kann.
Ich habe das Skript zum Erstellen eines Dienstes gefunden
#!/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
Aber ich weiß nicht, was ich in Start- oder Stoppmethoden schreiben soll. Ich habe versucht, den gleichen Inhalt von hit.sh in zu platzieren, start(){}
aber es gab einen Fehler für die Stoppmethode }
.
/usr/bin/myscript
, wenn Sie es alleine ausführen? Was wird ausgegeben,echo $?
wenn das Skript eine Ausführung abgeschlossen hat? Ist es 203?/usr/bin/myscript.sh
funktioniert gut bei der Ausführung über das Terminal undecho$?
gab mir1
Antworten:
Wenn Sie Ihr Codebeispiel wiederverwenden möchten, könnte es ungefähr so aussehen:
Natürlich sollte das Skript, das als Dienst ausgeführt werden soll, z. B.
/usr/local/bin/hit.sh
und der obige Code sollte z/etc/init.d/hitservice
.Für jedes Runlevel, auf dem dieser Dienst ausgeführt werden soll, müssen Sie einen entsprechenden Symlink erstellen. Zum Beispiel
/etc/init.d/rc5.d/S99hitservice
startet ein Symlink mit dem Namen den Dienst für Runlevel 5. Natürlich können Sie ihn auch weiterhin manuell überservice hitservice start
/ starten und stoppen.service hitservice stop
quelle
systemd
Skript, daher wird kein Suffix benötigt. Sie sollten in der Lage sein, alte Skripte ohne Probleme auszuführensystemd
. Hast du es versuchtsystemctl enable hitservice
?Ich glaube, dass CentOS 7 und höher systemd verwendet. Wenn dies bei Ihrem System der Fall ist, versuchen Sie Folgendes:
Platzieren Sie die Skriptbefehle, die Sie ausführen möchten
/usr/bin/myscript
.Denken Sie daran, das Skript mit ausführbar zu machen
chmod +x
.Erstellen Sie die folgende Datei:
/etc/systemd/system/my.service
Laden Sie alle Systemd-Servicedateien neu:
systemctl daemon-reload
Überprüfen Sie, ob es funktioniert, indem Sie den Dienst mit starten
systemctl start my
.Bonus:
Zum Testen des systemd-Dienstes kann eine tmux-Umgebung mit zwei Fenstern gestartet werden, in der das obere Fenster die Ausgabe des Skripts (
stdout
undstderr
) überwacht und das untere Fenster zum Neustarten der Dienste verwendet werden kann. Dies musstmux
installiert werden, dann einfach:Starten Sie dann den Dienst neu mit:
Beenden Sie
tmux
mitctrl-d
und dannctrl-c
.quelle
Type=forking
. Die Chancen stehen gut, dass der Fragesteller sie braucht,Type=simple
aber im Allgemeinen wird das Gabeln nicht empfohlen: 0pointer.de/public/systemd-man/… . Die Leute haben ihre alten Init-Skripte genommen und sie eingepackt,systemd
damit der Start ihres Dienstes funktioniertsystemd(init-script(service))
. Essystemd
ist jedoch ein Ersatz für Init-Skripte, daher sollten Sie den Dienst direkt mit aufrufen, damit ersystemd
so aussiehtsystemd(service)
.Dies ist mein Skript als Service:
quelle
Schauen Sie sich fpm an. Es ist ein Tool, das Init-Skripte für Sie erstellt. Funktioniert auf vielen Plattformen (systemd, upstart, ect ..)
https://github.com/jordansissel/fpm
quelle
Siehe Bash Service Manager- Projekt: https://github.com/reduardo7/bash-service-manager
Implementierungsbeispiel
Anwendungsbeispiel
quelle