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.service
dosya oluşturdum systemd
ve 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 listdir
Sistem günlüğümü çalıştırdığımda kök dizini ("/") geçerli çalışma dizini olarak kaydediyor. Tabii ki, /usr/local
geçerli dizin olarak beklediğimden , çünkü ExecStartPre
sürece başlamadan önce dizinleri değiştireceğimi düşündüm .
Açıkçası, bunun systemd
bir 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, chdir
bir kabuk komutudur ve çalıştırılabilir bir komut değildir. Tamam. Fakat hala dizinleri kullanarak değiştirmem için bir yol var systemd
mı?