it-swarm.com.de

Ausführen von chdir vor dem Starten des systemd-Dienstes

Frage: Kann ich einen Prozess mit systemd starten und diesem Prozess ein Arbeitsverzeichnis meiner Wahl zuweisen?

Ich habe einen Dienst, den ich mit systemd beginnen möchte. Wenn dieser Dienst gestartet wird, möchte ich ihm ein aktuelles Arbeitsverzeichnis zuweisen können. Ich weiß, wie das geht, wenn ich init verwendet habe, aber ich habe Probleme mit systemd.

Hier ist, was ich versucht habe, um zu arbeiten.

Mein Service

Ich habe ein einfaches Dienstprogramm ("listdir") erstellt, in Python geschrieben und in /opt/bin/listdir Platziert:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

Meine Konfigurationsdatei

Ich habe dann eine listdir.service - Datei für systemd erstellt und hier platziert: /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

Problem

Wenn ich systemctl start listdir Ausführe, zeichnet mein Systemprotokoll das Stammverzeichnis ("/") als aktuelles Arbeitsverzeichnis auf. Natürlich habe ich /usr/local Als aktuelles Verzeichnis erwartet, da ich dachte, ExecStartPre würde die Verzeichnisse ändern, bevor der Prozess gestartet wird.

Offensichtlich stelle ich mir vor, dass systemd so etwas wie ein Shell-Skript funktionieren würde (obwohl ich weiß, dass es kein Shell-Skript ist). Kann mir jemand eine Vorstellung davon geben, was ich tun soll? Ist es überhaupt möglich, ein Arbeitsverzeichnis mit systemd festzulegen? Vielen Dank!


Edit : Mein Systemprotokoll meldet einen Fehler. (Ich hab das gerade bemerkt.)

Executable path is not absolute, ignoring: chdir /usr/local 

chdir ist also ein Shell-Befehl und keine ausführbare Datei. Okay. Aber gibt es noch eine Möglichkeit für mich, Verzeichnisse mit systemd zu ändern?

155
Mario

Auf systemd> = 227 sollten Sie Folgendes verwenden können:

[Service]
WorkingDirectory=/usr/local

damit Ihr Skript dort ausgeführt wird.

( DOCS )

289
Eric Renouf