Başlatma sırasında / var / run altında bir dizin oluşturun


39

/var/runDaemon kullanıcısına verilen izni ile PID dosyası için kendi dizininde olması gereken bir servise sahiptim.

Bu komutu şu komutlarla oluşturabileceğimi öğrendim:

# mkdir /var/run/mydaemon

Sonra sahipliğini, işlemi yürütmek istediğim kullanıcı / gruba değiştirebilirim:

# chown myuser:myuser /var/run/mydaemon

Ama ne zaman bir yeniden başlatma yaptığımda bu dir GONE olacak! Makine her önyüklendiğinde bu kiri nasıl oluşturabilirim?

Yanıtlar:


56

Sistemd'in dizinler oluşturması için iki alternatif, tipik olarak en kolayı RuntimeDirectoryhizmetinizin birim dosyasında bir ilan etmektir:

RuntimeDirectory=, RuntimeDirectoryMode= Dizin adlarının bir listesini alır. /runAyarlanırsa , belirtilen adlara göre bir veya daha fazla dizin , ünite başlatıldığında (sistem hizmetleri için) aşağıda veya $ XDG_RUNTIME_DIR (kullanıcı hizmetleri için) altında ve ünite durdurulduğunda kaldırılır. Dizinler, belirtilen erişim moduna RuntimeDirectoryMode=sahip olacak ve içinde User=ve belirtilen kullanıcı ve gruba ait olacaktır Group=. Ünitenin bir veya daha fazla çalışma zamanı dizinini yönetmek ve kullanım ömürlerini daemon çalışma zamanına bağlamak için bunu kullanın. Belirtilen dizin adları göreceli olmalı ve "/", yani oluşturmak veya kaldırmak için basit dizinlere atıfta bulunmanız gerekir. Bu, ayrıcalık olmadığından / çalıştırma sırasında çalışma zamanı dizinleri oluşturamayan ve ayrıcalıklı olmadığından ve çalışma zamanı dizininin kullanımdan sonra otomatik olarak temizlendiğinden emin olmak için ayrıcalıklı daemonslar için kullanışlıdır.

Veya daha karmaşık veya farklı bir yapılandırma veya ömür boyu garanti gerektiren çalışma zamanı dizinleri tmpfiles.diçin, paketinizi bir dosya kullanın ve kullanın /usr/lib/tmpfiles.d/mydaemon.conf:

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -

Sonuncuyu kullandım çünkü asıl arka plan programı kullanıyor systemd-sysv-generatorve hafta boyunca yeterli öğrenme eğrisi yaşadım. Sadece bu bir .conf dosyası ve bir satır. Şu an iyi
hissedin

Zaten benim, tanımlanmış ikincisi yaşadım /usr/lib/tmpfiles.d/php7.3-fpm.confve /usr/lib/tmpfiles.d/php7.2-fpm.confve hala yaratmaz /run/phpdizini.
MarthyM

3

Dizini başlangıçta yapacak bir hizmet yarattım:

vim /etc/systemd/system/mydaemon-helper.service

İçeriği /etc/systemd/system/mydaemon-helper.service:

[Unit]
Description=MyDaemon Helper Simple Service
After=network.target

[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon
ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon
Restart=on-abort


[Install]
WantedBy=multi-user.target

Sonra bu servisi başlattım:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

Çıktı:

[root@alpha etc]# systemctl status mydaemon-helper.service
● mydaemon-helper.service - MyDaemon Helper Simple Service
   Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service...
May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service.

Son olarak sisteme başlangıçta yüklemesini söyledim:

systemctl enable mydaemon-helper


Tamam, sanırım böyle bir noob olduğumu düşünerek bunu benim soruma koymalıydım. Yine de öğreniyorum - sizlere teşekkürler!
user24601,

2
Hayır, cevap oluşturmak doğru şeydi, insanlar bu konuda yorum yapabilir ve ayrıca sorunuzu karıştırmaz. Kendi sorularınızı cevaplamak SO'da açıkça teşvik edilmektedir. Ve cevabınız da yanlış değil, sadece bunu yapmanın çok daha iyi yolları var, bu yüzden IMO'nun indirilmemesi gerekirdi. Ya da oylanmamalı. :)
Bryan Larsen

2
Bunu şimdiRuntimeDirectory yapmanın daha iyi bir yolu olsa da , bu direktifin olmadığı eski bir systemd (208) sürümüne sahip bir sunucuya rastladım, bu yüzden bu cevap tek geçici çözüm.
Davor Cubranic

Bu, aynı zamanda, hizmet kullanıcısından farklı bir kullanıcı tarafından yaratılmış ve sahip olunan bir dizine ihtiyacınız varsa veya dizinin yeniden başlatılıncaya kadar devam etmesi veya dizinin birden çok hizmet arasında paylaşılması için de böyle bir yöntemdir.
Perkins,
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.