2015-10-06 13 views
24

Bir programı systemd hizmeti olarak çalıştırırken STDOUT & STDERR dosyasını bir dosyaya bağlarken sorun yaşıyorum.Bir Systemd Hizmet Olarak Çalışırken Bir Dosyaya Çıkış Nasıl Borulanır?

ExecStart=/apppath/appname > /filepath/filename 2>&1 

Ama bu işe yaramazsa: Ben .service dosyaya aşağıdaki ekleyerek denedim. Çıktı/var/log/messages içinde biter ve journalctl kullanılarak görüntülenebilir ancak ayrı bir dosya istiyorum.

Ayrıca, StdOutput=tty ayarlamayı denedim, ancak bunu bir dosyaya yönlendirmenin bir yolunu bulamıyorum.

Herhangi bir yardım için teşekkür ederiz.

cevap

33

systemd.service(5) diyor ki:

ExecStart = Bu hizmet başlatıldığında yürütülür onların argümanları ile

Komutları.

Yani, systemd çalışır senin args >, /filepath/filename ile /apppath/appname, 2>&1

Dene:

deneyin
ExecStart=/bin/sh -c '/apppath/appname > /filepath/filename 2>&1' 
+0

Teşekkürler. Bu, SELinux ile yazmak istediğim altta yatan problemin, yazmaya çalıştığım günlük dosyasına sessizce bloke olmasını sağladı. – MichaelB76

+9

Bazıları, günlük dosyasına eklemek için ilk> ile >> değiştirmek isteyebilir. – Zyphrax

+4

Dikkat Edilmesi Gerekenler - Bu işlem, biri kabuk sarıcı ve biri de uygulama adı olmak üzere iki işlem oluşturur. 'Systemctl stop appname' ile her iki işlemi de öldürmek için, ExecStop'ta pkill komutunu kullanın. ExecStop =/bin/pkill -TERM -P $ MAILPID – siliconrockstar

1

:

ExecStart=/usr/bin/sh -c "/apppath/appname > /filepath/filename 2>&1" 

ExecStart ikili olmayı ilk bağımsız değişken gerektirir (istisna yok) ve borulara izin vermiyor veya yönlendirme. Bu nedenle, gerekli tüm süslü şeyleri yapabileceğiniz bir kabuk başlatmak için ExecStart kullanın.

İlgili konular