[gelöst] Service Unit failed (code=exited, status=203/EXEC)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
nephilim
Beiträge: 39
Registriert: 06.03.2017 18:11:50

[gelöst] Service Unit failed (code=exited, status=203/EXEC)

Beitrag von nephilim » 07.04.2017 21:00:31

Hej zusammen,

wie kann ich untenstehendem Problem auf den Grund gehen?

Code: Alles auswählen

pi@pcf-cloud:~ $ sudo systemctl status admin_certs.service
â admin_certs.service - neph:admin_certs.service:   Startet admin_certs.sh
   Loaded: loaded (/etc/systemd/system/admin_certs.service; enabled)
   Active: failed (Result: exit-code) since Fri 2017-04-07 20:51:55 CEST; 28s ago
  Process: 991 ExecStart=/usr/local/bin/directory/admin_certs.sh (code=exited, status=203/EXEC)
 Main PID: 991 (code=exited, status=203/EXEC)

Apr 07 20:51:55 pcf-cloud systemd[1]: admin_certs.service: main process exited, code=exited, status=203/EXEC
Apr 07 20:51:55 pcf-cloud systemd[1]: Failed to start cgai:admin_certs.service:   Startet admin_certs.sh.
Apr 07 20:51:55 pcf-cloud systemd[1]: Unit admin_certs.service entered failed state.
pi@pcf-cloud:~ $
Und hier noch die SU nachgereicht:

Code: Alles auswählen

[Unit]
Description=neph:admin_certs.service:   Startet admin_certs.sh
After=collect.service
Requires=collect.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/directory/admin_certs.sh

[Install]
WantedBy=multi-user.target

Ich blicke nicht, was da falsch läuft. :-( Hat jemand eine Idee, wie ich das ans Laufen bringen kann?

LG // neph
Zuletzt geändert von nephilim am 09.04.2017 18:16:50, insgesamt 1-mal geändert.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von breakthewall » 07.04.2017 21:46:16

Hallo

Laut der Fehlermeldung wurde durch dein Shellscript der betreffende Exitcode abgesetzt, der letztlich zu dieser Fehlermeldung führte. Somit ist das Problem recht wahrscheinlich im Shellscript zu suchen. Nur ohne das Shellscript zu sehen, wird es schwierig zu sagen was damit nicht stimmt, oder ob das Shellscript ggf. etwas erwartet was evtl. nicht da ist. Die Rechte scheinen soweit auch korrekt zu sein, denn sonst wäre das Shellscript erst gar nicht gestartet worden, was die Fehlermeldung wiederum verändert hätte. Was mir spontan noch einfällt dazu, wäre ggf. eine vergessene Shebang-Line an Anfang des Shellscripts, aufgrund des erhöhten Exitcodes. Würde halt mal das Shellscript posten, dann lässt sich mehr sagen.

nephilim
Beiträge: 39
Registriert: 06.03.2017 18:11:50

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von nephilim » 08.04.2017 09:05:42

Moin,

hier ist es auch schon:

Code: Alles auswählen

#!/bin/sh
#
################################################################################
#                                                                              #
# Script        : admin-certs.sh                                               #
#                                                                              #
#------------------------------------------------------------------------------#
# Project       : pcf-Server                                                   #
#                                                                              #
# Description   : Script creates ssl certificates for admin panel              #
#                                                                              #
# Version       : 1.0                                                          #
#                                                                              #
# Created by    : neph - domain.com - Development Team                         #
#------------------------------------------------------------------------------#
# Call          : sudo admin-certs.sh (or as root)                             #
#                                                                              #
# Parameter     : no dependencies                                              #
#                                                                              #
# Exit-Codes    : 0    = O.K.                                                  #
#               : !=0  = ERROR                                                 #
#                                                                              #
#------------------------------------------------------------------------------#
# Change history:                                                              #
#                                                                              #
# Date      Version  Name  Note                                                #
# 03.04.17  1.0      CG    creation                                            #
#                                                                              #
###########################################################################END##

#reading environment
. /etc/directory/parameter.txt

#variables
IP_REQ=`cat /etc/ssl/req.cnf | awk '/IP.1/ {print $3}'`
IP_CERT=`openssl x509 -in /etc/directory/certs/server.crt -noout -text | awk '/Address:/ {print $4}' | cut -d ":" -f2`

#check if the cert needs to be re-created
if [ $IP_INT = $IP_CERT ]
then
        exit 0

else

#reading current config (/etc/ssl/req.cnf) and its SAN IP and replacing it by the current server IP from /etc/directory/parameter.txt
sed s/$IP_REQ/$IP_INT/ /etc/ssl/req.cnf > /etc/ssl/req_new.cnf
rm /etc/ssl/req.cnf
mv /etc/ssl/req_new.cnf /etc/ssl/req.cnf

#removing old cert/ key and creating new ones using updated config (/etc/ssl/req.cnf)
cd /etc/directory/certs
rm server.*
openssl req -nodes -newkey rsa:2048 -sha256 -keyout server.key -out server.csr -config /etc/ssl/req.cnf
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extensions v3_req -extfile /etc/ssl/req.cnf
rm server.csr

#restarting the nginx web service
/etc/init.d/nginx restart

fi

exit 0
Hoffe, das hilft weiter.

LG // neph

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von breakthewall » 08.04.2017 18:48:18

nephilim hat geschrieben:

Code: Alles auswählen

IP_REQ=`cat /etc/ssl/req.cnf | awk '/IP.1/ {print $3}'`
IP_CERT=`openssl x509 -in /etc/directory/certs/server.crt -noout -text | awk '/Address:/ {print $4}' | cut -d ":" -f2`
Soweit wurden vier Fehler gefunden. Ein kritischer Fehler und drei Designfehler. Heute verwendet man keine Backticks mehr, aufgrund der komplizierten Übersicht und Handhabung. Und die Nutzung von cat fällt in die Kategorie, "Useless use of cat", und wäre damit überflüssig. Denn awk kann Dateien selbst verarbeiten, wie viele andere Programme auch.

Die moderne und korrigierte Variante wäre:

Code: Alles auswählen

IP_REQ=$(awk '/IP.1/ {print $3}' /etc/ssl/req.cnf)
Das ist einfacher zu schreiben und hebt sich deutlicher vom Rest ab. Und man hat wieder Code gespart.
nephilim hat geschrieben:

Code: Alles auswählen

if [ $IP_INT = $IP_CERT ]
then
        exit 0

else
Hier wäre der kritische Fehler, da die Variable $IP_INT nirgends im Shellscript definiert ist, womit alles fehl schlägt was darauf aufbaut. Somit ist die Test-Condition immer falsch, worauf sed die vorhandene IP mit nichts ersetzt, und letztlich OpenSSL mit einer fehlerhaften Config arbeitet. Auch sollte man Variablen nahezu immer in Doublequotes setzen. Das unterbindet Fehlinterpretationen durch die Shell, was insbesondere bei unüblichen Inhalten, oder bei Datei/Ordnernamen mit Leerzeichen/Sonderzeichen problematisch wird.
nephilim hat geschrieben:

Code: Alles auswählen

sed s/$IP_REQ/$IP_INT/ /etc/ssl/req.cnf > /etc/ssl/req_new.cnf
Normalerweise nutzt man bei sed wie auch awk Singleticks, um generellen Problemen vorzubeugen, wie auch Fehlinterpretationen durch die Shell selbst zu verhindern. Nebenbei bemerkt könnte sed an sich Dateien auch direkt bearbeiten, womit wiederum Arbeitsschritte wegfallen würden, wie das Löschen oder Verschieben der Config.

Da allerdings zwei Variablen expandieren müssen, müssten die normalen Singleticks durch Doublequotes ersetzt werden:

Code: Alles auswählen

sed "s/$IP_REQ/$IP_INT/" /etc/ssl/req.cnf > /etc/ssl/req_new.cnf

nephilim
Beiträge: 39
Registriert: 06.03.2017 18:11:50

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von nephilim » 08.04.2017 20:28:10

Hej breakthewall,

erst einmal vielen Dank für Deine Mühen. Deine Analyse ist mir sehr willkommen, da ich noch arg neu in dieser Materie unterwegs bin.
Hier wäre der kritische Fehler, da die Variable $IP_INT nirgends im Shellscript definiert ist, womit alles fehl schlägt was darauf aufbaut.
Die Variable $IP_INT, so glaubte ich, wird durch die Datei /etc/directory/Parameter.txt definiert, die ich durch das Einlesen der Umgebung am Anfang des Scripts gemacht habe. Ist das falsch? Manuell ausgeführt, ist das gelaufen.

Wie kann ich dem weiter auf den Grund gehen?

LG // neph

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von breakthewall » 08.04.2017 20:54:42

nephilim hat geschrieben:Die Variable $IP_INT, so glaubte ich, wird durch die Datei /etc/directory/Parameter.txt definiert, die ich durch das Einlesen der Umgebung am Anfang des Scripts gemacht habe. Ist das falsch? Manuell ausgeführt, ist das gelaufen.

Wie kann ich dem weiter auf den Grund gehen?

LG // neph
In jedem Fall wird ja etwas eingelesen, nur was genau alles ist ja bislang noch unbekannt, zumindest Mir. Wenn nun in dieser Datei die Variable mit korrektem Inhalt definiert und diese eingebunden wird, dann ist sie natürlich auch im Shellscript verfügbar. Möglich wäre auch das in diesem Teil ein Fehler steckt. Wäre daher nützlich mal den Inhalt der Parameter.txt zu sehen. Ich vergaß bislang zu fragen, ob das Konstrukt jemals zuvor via Systemd funktioniert hat? Oder ob das ggf. plötzlich eintrat?

nephilim
Beiträge: 39
Registriert: 06.03.2017 18:11:50

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von nephilim » 09.04.2017 07:27:20

Wäre daher nützlich mal den Inhalt der Parameter.txt zu sehen.
Natürlich, hier ist sie:

Code: Alles auswählen

# This file will be created while startup procedure

IP_INT=192.168.178.215
IP_V6=fe80::*************76/64
DNS=192.168.178.1
MAC=b8:**************:76
Ich vergaß bislang zu fragen, ob das Konstrukt jemals zuvor via Systemd funktioniert hat?
Nein, hat es nicht. Ich versuche es erst zu implementieren.

LG // neph

nephilim
Beiträge: 39
Registriert: 06.03.2017 18:11:50

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von nephilim » 09.04.2017 18:08:16

Habe mal etwas wietergesucht und im syslog folgenden Eintrag dazu gefunden:

Code: Alles auswählen

Apr  9 17:55:42 pcf-cloud systemd[958]: Failed at step EXEC spawning /usr/local/bin/directory/admin_certs.sh: No such file or directory
Ich habe dann das komplette Script auf den Kopf gestellt und wirklich jede betroffene Datei noch einmal angesehen. Ich finde den Fehler nicht. Und ich verstehe nicht, warum es, wenn ich es manuell starte, sauber durchgeht. Habe ich irgendwie die Möglichkeit herauszufinden, an welcher Stelle das Script aussteigt?

LG // neph

nephilim
Beiträge: 39
Registriert: 06.03.2017 18:11:50

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von nephilim » 09.04.2017 18:16:32

Habe den Fehler gefunden. ein - und einen _ vertauscht. Mist. :oops:

Danke für die Hilfe und wertvolle Anregungen.

LG // neph

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: Service Unit failed (code=exited, status=203/EXEC)

Beitrag von breakthewall » 10.04.2017 03:10:55

nephilim hat geschrieben:Habe den Fehler gefunden. ein - und einen _ vertauscht. Mist. :oops:

Danke für die Hilfe und wertvolle Anregungen.

LG // neph
Manchmal hängt es wirklich nur an Kleinigkeiten. :)

Nur seltsam das Systemd das nicht anzeigte, normal müsste auch her "No such file or directory" stehen. Hauptsache gelöst. :)

Würde noch als Anregung vorschlagen, die Variablen in der Parameters.txt in Doublequotes zu setzen, da hier Sonderzeichen existieren die die Shell interpretieren kann.

Dschorim
Beiträge: 2
Registriert: 23.08.2017 17:10:59

Re: [gelöst] Service Unit failed (code=exited, status=203/EXEC)

Beitrag von Dschorim » 23.08.2017 17:23:52

Ich habe ein recht ähnliches Problem:
mein router-service beendet sich unter debian 9 direkt nach dem start

Code: Alles auswählen

root@music:/home/pi/startup# systemctl status router.service
● router.service - auto router daemon
   Loaded: loaded (/lib/systemd/system/router.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2017-08-23 17:08:28 CEST; 2s ago
  Process: 2507 ExecStart=/home/pi/startup/router.sh (code=exited, status=203/EXEC)
 Main PID: 2507 (code=exited, status=203/EXEC)

Aug 23 17:08:28 music.pi systemd[1]: Started auto router daemon.
Aug 23 17:08:28 music.pi systemd[1]: router.service: Main process exited, code=exited, status=203/EXEC
Aug 23 17:08:28 music.pi systemd[1]: router.service: Unit entered failed state.
Aug 23 17:08:28 music.pi systemd[1]: router.service: Failed with result 'exit-code'.
der Service aus /lib/systemd/system/router.service:

Code: Alles auswählen

[Unit]
Description=auto router daemon

[Service]
Type=simple
User=root
ExecStart=/home/pi/startup/router.sh
die router.sh:

Code: Alles auswählen

#/bin/bash
sleep 30
iptables -t nat -A POSTROUTING -o enxb827eb5f31c0 -j MASQUERADE
iptables -A FORWARD -i enxb827eb5f31c0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o enxb827eb5f31c0 -j ACCEPT

python3 /home/pi/startup/router.py
Wenn ich die shell-datei manuell mit

Code: Alles auswählen

sudo ./router.sh
starte, funktioniert alles wie gewollt

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: [gelöst] Service Unit failed (code=exited, status=203/EXEC)

Beitrag von scientific » 25.08.2017 23:52:39

Am besten machst du damit einen eigenen Thread auf.
Hijacking eines Threads ist nicht so gern gesehen.

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

brummer
Beiträge: 181
Registriert: 19.02.2007 19:21:23

Re: [gelöst] Service Unit failed (code=exited, status=203/EXEC)

Beitrag von brummer » 27.08.2017 06:39:41

Dschorim hat geschrieben: ↑ zum Beitrag ↑
23.08.2017 17:23:52
User=root
ExecStart=/home/pi/startup/router.sh
Systemd führt die services mit einer eingeschränkten Environment variablen aus,
vielleicht musst du noch XDG_RUNTIME_DIR setzen damit das Skript gefunden wird.

Environment="XDG_RUNTIME_DIR=/run/user/USERID" <- (id -u $(logname))

Dschorim
Beiträge: 2
Registriert: 23.08.2017 17:10:59

Re: [gelöst] Service Unit failed (code=exited, status=203/EXEC)

Beitrag von Dschorim » 28.08.2017 15:08:21

Ungefähr so:

Code: Alles auswählen

[Unit]
Description=Router daemon
After=network.target

[Service]
Environment="XDG_RUNTIME_DIR=/run/user/1000" <- (id -u root)
RemainAfterExit=yes
User=root
ExecStart=/home/pi/startup/router.sh

[Install]
WantedBy=multi-user.target
Das klappt nicht...
Und noch eine dumme Frage: wo mache ich einen neuen Thread auf? Das habe ich noch nicht gefunden.

Antworten