Menulis file layanan systemd dasar

103

Saya mengembangkan aplikasi Nodejs yang berinteraksi dengan pengguna melalui HTTP di localhost. Praktis tidak ada parameter dan daemon secara virtual tidak memiliki dependensi dan hanya perlu di-up pada saat masuk.

Saya ingin mengikuti idiom pada setiap platform untuk skrip start-up, dan itu berarti pemula di Ubuntu dan systemd di Fedora.

  • Apakah ada tutorial yang baik untuk menulis file systemd sistem?
  • Adakah 'praktik terbaik' yang harus diperhatikan?

Saya telah menemukan sumber daya ini:

Saya kebanyakan mencari jenis API sebagai referensi, serta format dasar untuk diikuti.

hajar
sumber
Halaman Arch Linux Wiki tentang systemd memiliki bagian yang menarik tentang menulis file layanan.
Rudy Matela
> man systemd.service>> man systemd.unit
truezion

Jawaban:

29

Saya akan mulai dengan halaman manual Systemd . Mereka mewakili sumber daya yang komprehensif dari sistem dan layanan.

Ada juga FAQ Systemd freedesktop .

jasonwryan
sumber
43
Halaman manual akan berguna (saya berharap itu lebih bersih), tetapi apakah ada tutorial file sistem dasar? Seperti bagian mana yang diperlukan, bagian mana yang direkomendasikan, dan bagian mana yang opsional. Halaman manual tampaknya berasumsi bahwa saya sudah ahli dalam file sistem systemd, padahal saya bukan.
beatgammit
Bukannya aku sadar, sayangnya. Mungkin ada asumsi bahwa jika Anda menulis skrip init, Anda sudah tahu cara menulis skrip init. Lihatlah skrip Arch dan pilih satu yang mirip dengan yang Anda butuhkan: archlinux.org/packages/community/i686/systemd
jasonwryan
1
Terima kasih! Dengan bantuan Anda dan blog yang saya temukan, saya berhasil membuat yang dasar berfungsi. Systemd tampaknya jauh lebih baik daripada pemula atau daemon systemv init yang lama.
beatgammit
49
Siapa yang punya waktu di sana hidup untuk MULAI dengan itu. Maksud saya, jika Anda tahu apa yang Anda lakukan itu adalah referensi yang bagus, tetapi halaman buku panduannya rumit.
Jonathan Komar
1
@ macmadness86 OP sedang mencari sumber yang berwenang (lihat paragraf terakhir); untuk sebagian besar kebutuhan, membaca file layanan untuk aplikasi yang serupa dan kemudian berkonsultasi dengan bagian-bagian tertentu manhalaman akan lebih dari cukup untuk membawa Anda ke sana. Mereka sebenarnya sangat mudah.
jasonwryan
180

Contoh berikut diilhami oleh tautan ini, yang sebenarnya tidak menyebutkan semua langkah dan terdaftar hanya untuk mengkredit sumbernya: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

Langkah 1 : Saya membuat file ini (catatan lokasi) yang pada dasarnya menjalankan proses bash dengan argumen yang diperluas. Anda dapat menjalankan perintah Anda sendiri yang bisa berbeda dari bash.

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

Langkah 2 :

Muat ulang systemd:

systemctl daemon-reload

Mulai layanan baru:

systemctl enable foo

(Anda juga bisa disable)

(opsional) Langkah 3 : Ini akan mulai secara otomatis saat reboot berikutnya ke mode multi-pengguna (jalankan level 3) tetapi jika Anda ingin segera memulainya:

systemctl start foo
systemctl status foo # optional, just to verify

Pembaruan: Untuk kelengkapan, saya harus menambahkan bahwa ubion bionic tampaknya memiliki halaman manual yang sangat menyeluruh. RTFM di sini

ahli nujum
sumber
57
Terima kasih telah memposting tutorial singkat dan tidak hanya menautkan ke halaman manual di luar kantor!
Tobias J
2
systemctl memiliki pintasan perintah cat, untuk referensi.
Andy Bettisworth
Apa pintasan perintah kucing? Seperti cara membuat dan mengedit file kontrol systemd tanpa memasukkan keseluruhan path?
JpaytonWPD
apa saja izin yang harus dimiliki file ini?
knocte
2
Menurut halaman manual systemd.unit, Anda harus memasukkannya /etc/systemd/system. / usr / lib / systemd adalah tempat paket distribusi yang tepat meletakkan file mereka.
wbkang
4

Dokumentasi Redhat adalah sumber yang bagus.

caracal
sumber
2
Meskipun ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Stephen Rauch
1
@StephenRauch Saya tahu bahwa tautan biasa tidak diterima, tetapi ini adalah topik yang sangat besar dan tidak mudah untuk diringkas dalam jawaban.
caracal
Ini adalah panduan yang paling mudah dibaca yang saya temukan. Ini jawaban yang bagus. :-)
perlakukan mod Anda dengan baik
DigitalOcean juga memiliki serangkaian tutorial yang cukup komprehensif dan dokumentasi terkait: digitalocean.com/community/tutorials/…
irbanana