Sie sind nicht angemeldet.

1

25.09.2015, 17:30

eigener systemd service

Ich habe einen eigenen Systemdservice erstellt:
/etc/systemd/system/mystart.service
um ein Sript direkt nach dem start ausführen zu lassen.

Quellcode

1
2
3
4
5
6
7
8
9
[Unit]
Description=Mein systemd script

[Service]
Type=oneshot
ExecStart='/usr/bin/mystart.sh'

[Install]
WantedBy=multi-user.target


das Script liegt in einem selbst erstellten ordner und einen link darauf in /usr/bin

Quellcode

1
2
3
!#/bin/bash
mkdir /ordner
#Soll zum testen nur einen Ordner erstellen


ich habe bei beiden Dateien chmod a+x ausgeführt, aber es funktioniert trotzdem nicht.
Kann mir einer Sagen, was ich falsch mache??
python -c "import this"

def is_nerd(): while coding:
if inside.has_fun: return True
else return False

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Niualj« (30.09.2015, 15:25)


2

25.09.2015, 22:44

Also ein wenig abseits vom Thema, wenn ich scripts ausführen lassen möchte; also falls es nur um das geht, nutze ich immer /etc/local.d/* . Ansonsten für das schreiben von Systemd Servicefiles ist die Doku von Fedora recht gut.

Hier als Beispiel, brauchte für Nagios ein Startscript, das sieht dann so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Nagios
BindTo=network.target
[Install]
WantedBy=multi-user.target
[Service]
User=nagios
Group=nagios
Type=simple
ExecStart=/usr/sbin/nagios /etc/nagios/nagios.cfg



lg
Gentoo Can Do!

Wiki auf: http://deepdoc.at

3

25.09.2015, 22:52

Wenn ich dein Service verwende kommt eine brauchbare Fehlermeldung:

Quellcode

1
2
systemctl start mario.service           
Failed to start mario.service: Unit mario.service failed to load: Invalid argument. See system logs and 'systemctl status mario.service' for details.


Also mal nachsehen:

Quellcode

1
2
3
4
5
6
7
systemctl status mario.service
● mario.service - Mein systemd script
   Loaded: error (Reason: Invalid argument)
   Active: inactive (dead)

Sep 25 22:48:31 itmgmt systemd[1]: [/etc/systemd/system/mario.service:6] Executable path is not absolute, ignoring: '/usr/bin/mystart.sh'
Sep 25 22:48:31 itmgmt systemd[1]: mario.service lacks both ExecStart= and ExecStop= setting. Refusing.


Und so funktioniert es:

- execStart='/usr/bin/mystart.sh'
+ execStart=/usr/bin/mystart.sh


lg
boospy
Gentoo Can Do!

Wiki auf: http://deepdoc.at

4

26.09.2015, 12:23

Also ich wollte ein script schreiben, das auch den Pc-Betrieb über laufen soll und dann immer aus der /root/.bash_history und /meinOrdner/.bash_history die Befehle zusammenfasst.
Geht es dann trotzdem, dass ich das in den Ordner /etc/local.d/ tue?
Und muss ich die scripte die ich dorthin tue noch irgendwie anpassen?
python -c "import this"

def is_nerd(): while coding:
if inside.has_fun: return True
else return False

5

27.09.2015, 11:25

Das klingt für mich jetzt aber so, als wäre das eher etwas für einen Cronjob, den du, sagen wir mal, alle paar Minuten ausführen lässt.

Skripte legt man in /etc/local.d/ eigentlich nur an, wenn man OpenRC als Init System verwendet. Da hier aber Systemd zum Einsatz kommt, ist das mit dem service file schon richtig. Wohin du das Skript ablegst, das von dem Dienst gestartet wird, ist erstmal egal. Ich lege solche Sachen immer nach /usr/local/bin ab.

Wenn dein Skript einen weiteren Hintergrunddienst startet, müsstest du im systemd service aber statt "Type=oneshot"

Quellcode

1
2
[service]
Type=forking

angeben.


Edit: Vielleicht reicht auch schon ein "Type=simple". Das musst du dann entscheiden - Je nachdem, was dein Skript genau macht.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dexfill« (27.09.2015, 11:37)


6

27.09.2015, 13:12

Skripte legt man in /etc/local.d/ eigentlich nur an, wenn man OpenRC als Init System verwendet.


Nein das stimmt so nicht. Systemd verwendet das genauso. Nämlich mit diesem Service:

Quellcode

1
gentoo-local-dein_script_name.service


Die Services werden automatisch von systemd generiert. Funktioniert wunderbar. Vielleicht ist das die etwas unsaubere Lösung. Aber so kann man jeden Code den man möchte beim Sytsemstart und Systemstop bequem ausführen lassen.

lg
boospy
Gentoo Can Do!

Wiki auf: http://deepdoc.at

7

27.09.2015, 13:41

Ja, /etc/local.d/ sollte mit mit systemd ebenso nutzbar sein wie mit OpenRC
Der Code dafür steckt im Paket sys-apps/gentoo-systemd-integration

8

27.09.2015, 14:38

Ah ok, danke :) Wieder was gelernt.