[Ini tidak secara langsung membahas masalah systemd-tmpfiles tapi saya pikir Anda sudah mengenali bahwa dalam kasus khusus ini Anda lebih baik hanya menggunakan gema.]
Pertama, "multi-user.target" mungkin atau mungkin bukan yang ingin Anda gunakan. Jika Anda terbiasa dengan konsep runlevel dari hal-hal init style SysV, multi-user adalah systemd yang setara dengan runlevel 3, yang merupakan sistem multi-pengguna yang melakukan booting ke konsol, bukan GUI. Setara dengan runlevel 5, yang melakukan boot ke X, adalah graphical.target . Default ditentukan oleh symlink di /etc/systemd/system
(dan / atau /lib/systemd/system
; yang di /etc
akan mengesampingkan yang di /lib
) yang disebut default.target , gunakan ls untuk menemukan di mana ia menunjuk:
»ls -l /etc/systemd/system/default.target
default.target -> /usr/lib/systemd/system/multi-user.target
Untuk desktop linux normal ini akan menjadi graphical.target. Ini sebenarnya tidak penting jika Anda ingin layanan boot yang Anda buat untuk memulai terlepas dari apa runlevel / target default - dalam hal ini, kita bisa menggunakan default.target, dan tidak khawatir untuk apa itu alias. Namun, jika Anda menggunakan multi-pengguna, dan standar Anda adalah grafis, layanan Anda tidak akan terjadi.
Tergantung pada layanan, mungkin ada target atau layanan yang lebih tepat dan spesifik yang ingin Anda mulai terkait. Berdasarkan pertanyaan Anda yang lain, default.target mungkin baik-baik saja. Sebagai catatan, perbedaan antara "target" dan "layanan" adalah bahwa layanan berisi [Service]
bagian yang benar-benar menjalankan proses; target hanyalah cara mengelompokkan layanan melalui berbagai arahan "tergantung" dan "membutuhkan"; itu tidak melakukan apa pun sendiri selain memicu target atau layanan lain.
Ketika suatu layanan dimulai ditentukan oleh apa layanan lain secara eksplisit bergantung padanya. Dalam kasus acara yang sederhana dan berdiri sendiri seperti ini yang kita inginkan terlambat dalam proses boot, kita dapat menggunakan kombinasi arahan ini:
[Unit]
After=default.target
[Install]
WantedBy=default.target
Bagian "Instal" digunakan ketika layanan diinstal; "WantedBy" menentukan target yang ingin kita sertakan layanan ini (artinya akan berjalan jika target itu melakukannya, tetapi nb. Ini tidak menentukan kapan akan berjalan dalam kaitannya dengan yang lain ). Karena kami benar-benar ingin layanan ini berjalan lebih lama daripada lebih cepat, kami kemudian menentukan klausa "Setelah". Ini sebenarnya tidak harus sama dengan target WantedBy (biasanya tidak) dan dapat sepenuhnya dihilangkan jika Anda tidak peduli ketika itu terjadi; Saya hanya menggunakannya pada firasat bahwa sebagian besar hal lain akan dijalankan dalam kaitannya dengan hal-hal yang ada di suatu tempat dirantai dengan sesuatu yang telah ditentukan Before=default.target
(yang juga bisa kita gunakan; keinginan target dinilai sebelum target dijalankan).
Sebagai contoh, saya hanya akan menggema "halo dunia" ke konsol. Layanan itu sendiri dijelaskan di [Service]
bagian:
[Service]
Type=forking
ExecStart=/usr/local/bin/helloworld
Perintah itu membutuhkan path lengkap. Alasan saya tidak hanya menggunakan /usr/bin/echo "hello world"
adalah bahwa itu tidak akan berfungsi (output pergi ke / dev / null, saya pikir), dan sementara layanan yang melakukan echo "hello world" > /dev/console
kehendak, eksperimen menunjukkan bahwa menggunakan pengalihan shell dalam arahan ExecStart tidak akan . Jadi / usr / local / bin / helloworld adalah skrip shell dengan satu baris echo "hello world" > /dev/console
,.
Perhatikan Type=forking
, yang diperlukan untuk skrip shell.
Lengkap, minimal berkas layanan kami hanya tiga bagian ( [Unit]
, [Service]
, dan [Install]
). Untuk menginstal, letakkan file atau symlink ke file tersebut di / etc / systemd / system atau / usr / lib / systemd / system, dan:
systemctl --system enable helloworld
Itu harus dicetak ln -s ...
. Ini tidak menjalankan layanan, itu hanya mengkonfigurasi untuk dijalankan saat boot seperti yang dibahas di atas.
Singkatnya. man systemd.unit
dan man systemd.service
memiliki lebih banyak detail.