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ı?