Systemd hizmetini başlatmadan önce chdir yürütme


148

Soru: Systemd ile bir süreci başlatabilir ve bu süreci seçtiğim çalışma dizinine atayabilir miyim?

Başlamak istediğim bir hizmetim var systemd. Bu servis başlatıldığında, geçerli bir çalışma dizini atamak istiyorum. Kullanıyorsam bunu nasıl yapacağımı biliyorum init, ama sorun yaşıyorum systemd.

İşte çalışmaya çalışıyorum.

Benim hizmet

Python ile yazılmış basit bir yardımcı program ("listdir") oluşturdum ve yerleştirdim /opt/bin/listdir:

#! /usr/bin/python

import os

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

Yapılandırma Dosyam

Sonra bir listdir.servicedosya oluşturdum systemdve buraya yerleştirdim /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

Sorun

systemctl start listdirSistem günlüğümü çalıştırdığımda kök dizini ("/") geçerli çalışma dizini olarak kaydediyor. Tabii ki, /usr/localgeçerli dizin olarak beklediğimden , çünkü ExecStartPresürece başlamadan önce dizinleri değiştireceğimi düşündüm .

Açıkçası, bunun systemdbir kabuk betiği gibi bir şey çalışacağını hayal ediyorum (bir kabuk betiği olmadığını bildiğim halde). Birisi bana ne yapmam gerektiği hakkında bir fikir verebilir mi? Kullanarak bir çalışma dizini ayarlamak bile mümkün mü systemd? Teşekkürler!


Düzenleme: Sistem günlüğüm bir hata bildiriyor. (Sadece farkettim.)

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

Yani, chdirbir kabuk komutudur ve çalıştırılabilir bir komut değildir. Tamam. Fakat hala dizinleri kullanarak değiştirmem için bir yol var systemdmı?

Yanıtlar:


270

Systemd> = 227'de şunları kullanabilmelisiniz:

[Service]
WorkingDirectory=/usr/local

Komut dosyanızı orada yürütmek için.

( DOCS )


4
Bunu nasıl buldun? Belgelerde hiçbir yerde söz edilmedi !
jameshfisher


3
@EricRenouf aha, servis dokümantasyonundaki paylaşılan seçenekleri sadece kopyalamalıdırlar
jameshfisher

3
Yani sadece netlik için, bu [Service]bölüme gider miydi?
dthor

4
Kendime cevap vererek, versiyonuna rağmen en son CentOS 7'de çalıştı.
BrunoJCM,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.