[gelöst] Debian 8 Jessie Systemd Shell Script startet nicht
-
- Beiträge: 5
- Registriert: 02.03.2015 09:52:13
[gelöst] Debian 8 Jessie Systemd Shell Script startet nicht
Hallo,
ich habe ein Problem Debian 8 Jessie, wollte es mal ausprobieren ob alles funktioniert und siehe da, das erste Problem ist da.
Ich möchte ein Shell Script beim booten starten und beim shutdown beenden. Leider funktioniert es bei mir nicht.
meinshellscript.service
-------
[Unit]
Description=Shellscript
[Service]
ExecStart=/root/shellscript start
ExecStop=/root/shellscript stop
[Install]
WantedBy=multi-user.target
-----------
systemctl enable meinshellscript.service
habe auch schon probiert ExecStart=/bin/bash /root/shellscript start
... andere Verzeichnisse als /root oder /home
Type=forking und Type=simple probiert...
chmod 777 probiert...
...User=root...
Habt ihr eine Idee wieso mein billiges Shellscript mit Systemd nicht mehr startet ? Mit Wheezy war das identisch und einfach und es lief perfekt.
Systemd ist sowas von scheisse!
Vielen Dank
ich habe ein Problem Debian 8 Jessie, wollte es mal ausprobieren ob alles funktioniert und siehe da, das erste Problem ist da.
Ich möchte ein Shell Script beim booten starten und beim shutdown beenden. Leider funktioniert es bei mir nicht.
meinshellscript.service
-------
[Unit]
Description=Shellscript
[Service]
ExecStart=/root/shellscript start
ExecStop=/root/shellscript stop
[Install]
WantedBy=multi-user.target
-----------
systemctl enable meinshellscript.service
habe auch schon probiert ExecStart=/bin/bash /root/shellscript start
... andere Verzeichnisse als /root oder /home
Type=forking und Type=simple probiert...
chmod 777 probiert...
...User=root...
Habt ihr eine Idee wieso mein billiges Shellscript mit Systemd nicht mehr startet ? Mit Wheezy war das identisch und einfach und es lief perfekt.
Systemd ist sowas von scheisse!
Vielen Dank
Zuletzt geändert von colognebeach am 02.03.2015 17:13:24, insgesamt 2-mal geändert.
Re: Debian 8 Jessie Systemd Shell Script startet nicht
Was sagt
?
Hat es eine ordentliche shebang? Evtl mal /bin/sh -c oder /bin/bash -c davorsetzen.
Code: Alles auswählen
systemctl status meinshellscript.service
Hat es eine ordentliche shebang? Evtl mal /bin/sh -c oder /bin/bash -c davorsetzen.
Unix is user-friendly; it's just picky about who its friends are.
-
- Beiträge: 5
- Registriert: 02.03.2015 09:52:13
Re: Debian 8 Jessie Systemd Shell Script startet nicht
so sieht meine Ausgabe aus bei (ohne /bin/bash -c ):
systemctl status meinshellscript.service
root@www:/home/user# systemctl status meinshellscript.service
● meinshellscript.service - meinshellscript
Loaded: loaded (/lib/systemd/system/meinshellscript.service; enabled)
Active: inactive (dead) since Mo 2015-03-02 12:08:31 CET; 1min 3s ago
Process: 624 ExecStop=/etc/meinshellscript stop (code=exited, status=0/SUCCESS)
Process: 358 ExecStart=/etc/meinshellscript start (code=exited, status=0/SUCCESS)
Main PID: 358 (code=exited, status=0/SUCCESS)
Mär 02 12:08:30 www sec[358]: Starte Script
Mär 02 12:08:31 www sec[624]: Stoppe Script
Mit /bin/bash -c :
● meinshellscript.service - meinshellscript
Loaded: loaded (/lib/systemd/system/meinshellscript.service; enabled)
Active: failed (Result: exit-code) since Mo 2015-03-02 11:45:17 CET; 39s ago
Process: 392 ExecStop=/etc/meinshellscript stop (code=exited, status=0/SUCCESS)
Process: 360 ExecStart=/bin/bash -c /etc/meinshellscript start (code=exited, status=1/FAILURE)
Main PID: 360 (code=exited, status=1/FAILURE)
.
.
.
.
im groben sieht mein Shellscript so in etwa aus, natürlich mit mehr Inhalt:
#!/bin/bash
case "$1" in
start)
echo "Starte Meinshellscript"
Führt irgendein Befehl... blabla
;;
stop)
echo "Stoppe Meinshellscript"
Stoppt irgendein Befehl... blabla
;;
status)
echo "Bla bla"
;;
*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;
esac
Unter Wheezy klappte das super... und unter Jessie funktioniert das Script auch aus der Konsole ala :
# meinshellscript start
... Vielen dank
systemctl status meinshellscript.service
root@www:/home/user# systemctl status meinshellscript.service
● meinshellscript.service - meinshellscript
Loaded: loaded (/lib/systemd/system/meinshellscript.service; enabled)
Active: inactive (dead) since Mo 2015-03-02 12:08:31 CET; 1min 3s ago
Process: 624 ExecStop=/etc/meinshellscript stop (code=exited, status=0/SUCCESS)
Process: 358 ExecStart=/etc/meinshellscript start (code=exited, status=0/SUCCESS)
Main PID: 358 (code=exited, status=0/SUCCESS)
Mär 02 12:08:30 www sec[358]: Starte Script
Mär 02 12:08:31 www sec[624]: Stoppe Script
Mit /bin/bash -c :
● meinshellscript.service - meinshellscript
Loaded: loaded (/lib/systemd/system/meinshellscript.service; enabled)
Active: failed (Result: exit-code) since Mo 2015-03-02 11:45:17 CET; 39s ago
Process: 392 ExecStop=/etc/meinshellscript stop (code=exited, status=0/SUCCESS)
Process: 360 ExecStart=/bin/bash -c /etc/meinshellscript start (code=exited, status=1/FAILURE)
Main PID: 360 (code=exited, status=1/FAILURE)
.
.
.
.
im groben sieht mein Shellscript so in etwa aus, natürlich mit mehr Inhalt:
#!/bin/bash
case "$1" in
start)
echo "Starte Meinshellscript"
Führt irgendein Befehl... blabla
;;
stop)
echo "Stoppe Meinshellscript"
Stoppt irgendein Befehl... blabla
;;
status)
echo "Bla bla"
;;
*)
echo "Fehlerhafter Aufruf"
echo "Syntax: $0 {start|stop|status}"
exit 1
;;
esac
Unter Wheezy klappte das super... und unter Jessie funktioniert das Script auch aus der Konsole ala :
# meinshellscript start
... Vielen dank
Re: Debian 8 Jessie Systemd Shell Script startet nicht
Packe es doch mal (ohne unit/service-Skript) nach init.d/ (LSB-Header vorausgesetzt),
systemd sollte dann die Kompatibilitätsbehandlung machen.
systemd sollte dann die Kompatibilitätsbehandlung machen.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: Debian 8 Jessie Systemd Shell Script startet nicht
Dieser Ausgabe nach wurde das Skript aus Sicht von systemd richtig ausgeführt. Erwartest du in deinem Skript eventuell irgendwelche gesetzten Umgebungsvariablen, die bei der Ausführung durch systemd nicht gesetzt sind?colognebeach hat geschrieben: root@www:/home/user# systemctl status meinshellscript.service
● meinshellscript.service - meinshellscript
Loaded: loaded (/lib/systemd/system/meinshellscript.service; enabled)
Active: inactive (dead) since Mo 2015-03-02 12:08:31 CET; 1min 3s ago
Process: 624 ExecStop=/etc/meinshellscript stop (code=exited, status=0/SUCCESS)
Process: 358 ExecStart=/etc/meinshellscript start (code=exited, status=0/SUCCESS)
Main PID: 358 (code=exited, status=0/SUCCESS)
Mär 02 12:08:30 www sec[358]: Starte Script
Mär 02 12:08:31 www sec[624]: Stoppe Script
Da sich das Skript nach der Ausführung mit start direkt wieder beendet, wird es sofort auch mit stop aufgerufen. Du willst aber ja, dass die ExecStop-Zeile erst beim Herunterfahren ausgeführt wird. Dazu kannst du die Zeile
Code: Alles auswählen
RemainAfterExit=yes
Manchmal bekannt als Just (another) Terminal Hacker.
-
- Beiträge: 5
- Registriert: 02.03.2015 09:52:13
Re: Debian 8 Jessie Systemd Shell Script startet nicht
@rendegast
Viel dank für deinen Tipp, leider ist es in meinem Fall nicht hilfreich da Systemd wohl kaum das händeln kann.
Hierbei handelt es sich um mein Firewall Script auf iptables basis.
Beim stoppen soll nämlich folgendes passieren, alle Firewall Regeln sollen geflusht werden:
....
stop)
echo "Stoppe IP-Paketfilter"
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Default-Policies setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
....
Ich weiss das das beim herunterfahren eh nicht sinnvoll ist, aber mit nur einem Befehl firewall stop oder firewall start kann man schöner arbeiten wenn man mal das Script um paar Regeln erweitern oder etc...
@JTH
Leider wird das Script noch nicht mal beim booten gestartet... ich könnte damit leben wenn es beim herunterfahren nicht beendet wird... jedoch würde ich schon gerne diese Befehle beibehalten.... firewall stop oder firewall start aus nur einem Shell Script ... ich weiss das ich daraus mehr Scripte bauen könnte aber sinnvoll ist das meiner Meinung nicht wenn es unter Wheezy... Squeeze usw... wunderbar klappte.
Vielen Dank euch...
Viel dank für deinen Tipp, leider ist es in meinem Fall nicht hilfreich da Systemd wohl kaum das händeln kann.
Hierbei handelt es sich um mein Firewall Script auf iptables basis.
Beim stoppen soll nämlich folgendes passieren, alle Firewall Regeln sollen geflusht werden:
....
stop)
echo "Stoppe IP-Paketfilter"
# Tabelle flushen
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Default-Policies setzen
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
....
Ich weiss das das beim herunterfahren eh nicht sinnvoll ist, aber mit nur einem Befehl firewall stop oder firewall start kann man schöner arbeiten wenn man mal das Script um paar Regeln erweitern oder etc...
@JTH
Leider wird das Script noch nicht mal beim booten gestartet... ich könnte damit leben wenn es beim herunterfahren nicht beendet wird... jedoch würde ich schon gerne diese Befehle beibehalten.... firewall stop oder firewall start aus nur einem Shell Script ... ich weiss das ich daraus mehr Scripte bauen könnte aber sinnvoll ist das meiner Meinung nicht wenn es unter Wheezy... Squeeze usw... wunderbar klappte.
Vielen Dank euch...
Re: Debian 8 Jessie Systemd Shell Script startet nicht
Es wird ausgeführt. Eventuell aber zu früh? Ich kenn mich mit iptables leider nicht aus, musst du eventuell warten, bis die Netzwerkverbindungen bereit sind? Dann müsstest du ein im [Unit]-Abschnitt im Service-File ergänzen.
Wie/an welcher Stelle hast du das Skript denn vor Jessie beim Hochfahren aufgerufen?
Code: Alles auswählen
After=network.target
Wie/an welcher Stelle hast du das Skript denn vor Jessie beim Hochfahren aufgerufen?
Manchmal bekannt als Just (another) Terminal Hacker.
-
- Beiträge: 5
- Registriert: 02.03.2015 09:52:13
Re: Debian 8 Jessie Systemd Shell Script startet nicht
@JTH
Danke für den Tipp
das macht sowieso Sinn und habe es ergänzt... aber auch leider das hat nicht funktioniert... Script startet nicht beim booten
Danke für den Tipp
Code: Alles auswählen
After=network.target
Re: Debian 8 Jessie Systemd Shell Script startet nicht
Hast du das /bin/bash -c in den Exec-Zeilen wieder entfernt? Laut deiner Ausgabe von systemctl status oben wurde das Skript dann korrekt ausgeführt. Es hapert eher am Ausführungszeitpunkt oder so.
Hast du auch das RemainAfterExit wie erwähnt ergänzt? Ohne wird das Skript halt direkt nacheinander mit start und stop als Parameter aufgerufen – dann siehst du wahrscheinlich auch nicht den gewollten Effekt.
Hast du auch das RemainAfterExit wie erwähnt ergänzt? Ohne wird das Skript halt direkt nacheinander mit start und stop als Parameter aufgerufen – dann siehst du wahrscheinlich auch nicht den gewollten Effekt.
Manchmal bekannt als Just (another) Terminal Hacker.
-
- Beiträge: 5
- Registriert: 02.03.2015 09:52:13
Re: Debian 8 Jessie Systemd Shell Script startet nicht
@JTH vielen Dank, das war es
... ich wäre nicht drauf gekommen das die start und stop Parameter dadurch nacheinander ablaufen sich so gesehen dann aufheben...
so funktioniert es jetzt super bei mir, zusammen gefasst in gemeinsamer Arbeit
:
---------
[Unit]
Description=MeinShellScript
After=network.target
[Service]
RemainAfterExit=yes
ExecStart=/root/meinshellscript start
ExecStop=/root/meinshellscript stop
User=root
[Install]
WantedBy=multi-user.target
----------
![Hail :hail:](./images/smilies/icon_hail.gif)
so funktioniert es jetzt super bei mir, zusammen gefasst in gemeinsamer Arbeit
![Very Happy :D](./images/smilies/icon_biggrin.gif)
---------
[Unit]
Description=MeinShellScript
After=network.target
[Service]
RemainAfterExit=yes
ExecStart=/root/meinshellscript start
ExecStop=/root/meinshellscript stop
User=root
[Install]
WantedBy=multi-user.target
----------