Menjalankan chdir sebelum memulai layanan systemd

148

Pertanyaan: Bisakah saya memulai proses dengan systemd dan menugaskan proses itu direktori kerja yang saya pilih?

Saya memiliki layanan yang ingin saya mulai systemd. Ketika layanan itu sedang dimulai, saya ingin dapat menetapkannya sebagai direktori kerja saat ini. Saya tahu bagaimana melakukan ini jika saya menggunakan init, tetapi saya mengalami masalah dengan systemd.

Inilah yang saya coba untuk mulai bekerja.

Layanan saya

Saya membuat utilitas sederhana ("listdir"), ditulis dengan Python, dan ditempatkan di /opt/bin/listdir:

#! /usr/bin/python

import os

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

File Konfigurasi Saya

Saya kemudian membuat listdir.servicefile untuk systemddan meletakkannya di sini /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

Masalah

Ketika saya menjalankan systemctl start listdirlog sistem saya mencatat direktori root ("/") sebagai direktori kerja saat ini. Tentu saja, saya berharap /usr/localsebagai direktori saat ini, karena saya pikir ExecStartPreakan mengubah direktori sebelum memulai proses.

Jelas, saya membayangkan itu systemdakan bekerja seperti skrip shell (meskipun saya tahu itu bukan skrip shell). Bisakah seseorang memberi saya ide tentang apa yang harus saya lakukan? Apakah mungkin untuk mengatur direktori kerja menggunakan systemd? Terima kasih!


Sunting: Log sistem saya melaporkan kesalahan. (Saya baru saja memperhatikan.)

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

Jadi, chdiradalah perintah shell, dan bukan executable itu sendiri. Baik. Tetapi apakah masih ada cara bagi saya untuk mengubah direktori menggunakan systemd?

Mario
sumber

Jawaban:

271

Pada systemd> = 227 Anda harus dapat menggunakan:

[Service]
WorkingDirectory=/usr/local

untuk menjalankan skrip Anda di sana.

( DOCS )

Eric Renouf
sumber
4
Bagaimana Anda menemukan ini? Tidak disebutkan di manapun dalam dokumentasi !
jameshfisher
2
@jameshfisher ada di bagian dokumentasi ini
Eric Renouf
3
@EricRenouf aha, mereka seharusnya hanya menduplikasi opsi yang dibagikan dalam dokumentasi layanan
jameshfisher
3
Jadi hanya untuk kejelasan, apakah ini akan masuk ke [Service]bagian?
dthor
4
Menjawab sendiri, itu bekerja pada CentOS 7 terbaru, terlepas dari versi.
BrunoJCM