Buat direktori di bawah / var / run saat boot

39

Saya memiliki daemon yang membutuhkan dir sendiri /var/rununtuk file PID-nya dengan izin tertulis yang diberikan kepada pengguna daemon.

Saya menemukan saya bisa membuat dir ini dengan perintah-perintah ini:

# mkdir /var/run/mydaemon

Kemudian saya dapat mengubah kepemilikannya kepada pengguna / grup yang ingin saya jalankan prosesnya:

# chown myuser:myuser /var/run/mydaemon

Tapi dir ini akan PERGI setiap kali saya mengeluarkan reboot! Bagaimana cara mendapatkan dir ini untuk membuat setiap kali mesin boot?

pengguna24601
sumber

Jawaban:

56

Dua alternatif untuk membuat systemd membuat direktori, biasanya yang paling mudah adalah dengan mendeklarasikan RuntimeDirectorydalam file unit layanan Anda:

RuntimeDirectory=, RuntimeDirectoryMode= Mengambil daftar nama direktori. Jika diatur, satu atau lebih direktori dengan nama yang ditentukan akan dibuat di bawah ini /run(untuk layanan sistem) atau di bawah $ XDG_RUNTIME_DIR (untuk layanan pengguna) ketika unit dimulai, dan dihapus ketika unit dihentikan. Direktori akan memiliki mode akses yang ditentukan RuntimeDirectoryMode=, dan akan dimiliki oleh pengguna dan grup yang ditentukan dalam User=dan Group=. Gunakan ini untuk mengelola satu atau lebih direktori runtime unit dan ikat masa hidup mereka ke daemon runtime. Nama direktori yang ditentukan harus relatif, dan mungkin tidak termasuk "/", yaitu harus merujuk ke direktori sederhana untuk membuat atau menghapus. Ini sangat berguna untuk daemon yang tidak memiliki hak istimewa yang tidak dapat membuat direktori runtime dalam / run karena kurangnya hak istimewa, dan untuk memastikan direktori runtime dibersihkan secara otomatis setelah digunakan.

Atau untuk direktori runtime yang membutuhkan konfigurasi yang lebih kompleks atau berbeda atau jaminan seumur hidup, gunakan tmpfiles.ddan suruh paket Anda untuk menjatuhkan file /usr/lib/tmpfiles.d/mydaemon.conf:

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -
HBruijn
sumber
Saya menggunakan yang terakhir karena daemon yang sebenarnya menggunakan systemd-sysv-generatordan saya sudah punya cukup kurva belajar selama seminggu. Hanya satu file .conf dan satu baris itu. Merasa baik sekarang B-)
user24601
Saya sudah memiliki yang terakhir didefinisikan dalam saya /usr/lib/tmpfiles.d/php7.3-fpm.confdan /usr/lib/tmpfiles.d/php7.2-fpm.confdan itu masih tidak membuat /run/phpdirektori.
MarthyM
3

Saya membuat layanan yang akan membuat dir di awal:

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

Isi dari /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

Lalu saya memulai layanan ini:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

Keluaran:

[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.

Terakhir saya memberi tahu sistem untuk memuatnya saat startup:

systemctl enable mydaemon-helper

pengguna24601
sumber
Ok, saya kira saya harus menempatkan ini dalam pertanyaan saya mengingat saya seorang noob. Saya sedang belajar - terima kasih untuk kalian!
user24601
2
Tidak, membuat jawaban adalah hal yang tepat untuk dilakukan, sehingga orang dapat mengomentarinya dan juga itu tidak mengacaukan pertanyaan Anda. Menjawab pertanyaan Anda sendiri secara eksplisit dianjurkan di SO. Dan jawaban Anda juga tidak salah, hanya saja ada banyak cara yang lebih baik untuk melakukan ini, jadi IMO Anda seharusnya tidak diturunkan. Seharusnya tidak dibatalkan juga. :)
Bryan Larsen
2
Walaupun RuntimeDirectorycara yang lebih baik untuk melakukan ini sekarang , saya berlari ke server dengan versi lama systemd (208) di mana arahan itu tidak ada, jadi jawaban ini adalah satu-satunya solusi.
Davor Cubranic
Ini juga tampaknya masih menjadi cara untuk melakukannya jika Anda memerlukan direktori yang dibuat dan dimiliki oleh pengguna yang berbeda dari pengguna layanan, atau agar direktori tersebut bertahan hingga reboot, atau agar direktori tersebut dibagikan di antara beberapa layanan.
Perkins