Ich habe ein Shell-Skript wie folgt
ss.sh
#!/bin/bash
opFile="custom.data"
sourceFile="TestOutput"
./fc app test > $sourceFile
grep -oP '[0-9.]+(?=%)|[0-9.]+(?=[A-Z]+ of)' "$sourceFile" | tr '\n' ',' > $opFile
sed -i 's/,$//' $opFile
Voraussetzung ist, dass ich dieses Skript mit dem Befehl watch verwenden muss. Und ich möchte daraus einen System-Service machen. Ich habe es so gemacht.
sc.sh
#!/bin/bash
watch -n 60 /root/ss.sh
Und in meiner / etc / systemd / system,
log_info.service
[Unit]
Description="Test Desc"
After=network.target
[Service]
ExecStart=/root/sc.sh
Type=simple
[Install]
WantedBy=default.target
Wenn ich systemctl start log_info.service starte, läuft es aber nicht kontinuierlich so, wie ich es gerne hätte.
Beim Ausführen von sytemctl status log_info.service
info_log.service - "Test Desc"
Loaded: loaded (/etc/systemd/system/info_log.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2016-09-12 08:17:02 UTC; 2min 18s ago
Process: 35555 ExecStart=/root/sc.sh (code=exited, status=1/FAILURE)
Main PID: 35555 (code=exited, status=1/FAILURE)
Sep 12 08:17:02 mo-b428aa6b4 systemd[1]: Started "Test Desc".
Sep 12 08:17:02 mo-b428aa6b4 sc.sh[35654]: Error opening terminal: unknown.
Sep 12 08:17:02 mo-b428aa6b4 systemd[1]: info_log.service: Main process exited, code=exited, status=1/FAILURE
Sep 12 08:17:02 mo-b428aa6b4 systemd[1]: info_log.service: Unit entered failed state.
Sep 12 08:17:02 mo-b428aa6b4 systemd[1]: info_log.service: Failed with result 'exit-code'.
Irgendwelche Ideen, warum es nicht richtig läuft? Jede Hilfe wäre dankbar!
Error opening terminal: unknown.
watch
muss auf ein Terminal schreiben, aber Dienste haben keinen Zugriff auf eines. Warum soll dies eine Dienstleistung sein?watch
oder läuft sowasscreen
odertmux
Sie können also ein Fenster haben, in dem das ausgeführt wird, und andere, in denen Sie andere Arbeiten ausführen. Bonus: Sie können sich wieder mit denselben Terminals verbinden, wenn Sie sich remote anmelden, und die Dinge, die Sie tun, überleben eine SSH-Trennungscreen
undtmux
sind nicht verfügbar? Sie können schon da sein. Andernfalls würde ich wahrscheinlich entweder 2 Fenster öffnen, wenn ich das die ganze Zeit haben wollte, oder es nur episodisch ausführen.Antworten:
Wie die Fehlermeldung zeigt,
watch
Kann nur von einem Terminal aus verwendet werden:Aber Ihre Anforderung ist sehr wahrscheinlich ist nicht um das Skript mit zu verwenden
watch
. Ihre Anforderung ist zu lassen sie es alle 60 sekunden laufen, undwatch
ist das Werkzeug, für das Sie sich letztendlich entschieden haben.Die gebräuchlichste Methode, ein Skript alle 60 Sekunden auszuführen, wäre cron - z.B. ein
* * * * *
Cronjob würde jede Minute ausgeführt werden. Mit systemd .services können Sie eine .timer-Einheit für denselben Zweck verwenden:Anstatt den .service zu starten, starten Sie stattdessen den .timer, und er versucht regelmäßig, den .service von selbst zu starten.
quelle
.service
, welche dann ruft dein script auf.[Timer] Unit=
. Andernfallsfoo.timer
werde versuchen zu suchenfoo.service
standardmäßig.