Saya membaca bahwa ada dua folder untuk file unit (bukan dalam mode pengguna).
/usr/lib/systemd/system/: units provided by installed packages
/etc/systemd/system/: units installed by the system administrator
Bertentangan dengan pemahaman ini adalah jawaban berikut: https://unix.stackexchange.com/a/47715/33386 . Dapatkah seseorang mengisi informasi yang hilang sehingga saya mengerti apa yang sedang terjadi? ( PEMBARUAN: Jawabannya telah diperbarui, dan pemahaman saya tidak lagi bertentangan dengan itu. )
Selain itu, tampaknya skrip disusun dalam subfolder di dalam /etc/systemd/system/
folder:
getty.target.wants
multi-user.target.wants
Di lokasi lain saya membaca bahwa ada lokasi lain. Tampaknya ini untuk layanan khusus pengguna.
/usr/lib/systemd/user/ where services provided by installed packages go.
/etc/systemd/user/ where system-wide user services are placed by the system administrator.
~/.config/systemd/user/ where the user puts its own services.
Pembaruan 2015-08-31:
Demi orang lain, berikut adalah tautan ke pertanyaan terkait yang baru-baru ini saya tanyakan: Di mana saya meletakkan skrip yang dijalankan oleh unit systemd?
systemd
directory-structure
Jonathan Komar
sumber
sumber
/etc/systemd/system
adalah tempat Anda meletakkan skrip Anda, pacman menempatkan skrip paket/usr/lib/systemd/system
dan mengeluarkansystemctl enable foo.service
menciptakan symlink dari/usr
ke/etc
...man systemd.target
: itu menjelaskan alasan di balik pengelompokan.Jawaban:
Tempat terbaik untuk meletakkan file unit sistem :
/etc/systemd/system
Pastikan untuk menambahkan target di bawah bagian [Instal], baca "Bagaimana dia tahu?" untuk detail. PEMBARUAN :/usr/local/lib/systemd/system
adalah opsi lain, baca "Area Abu-abu" untuk detailnya. "Tempat terbaik untuk meletakkan file unit pengguna :
/etc/systemd/user
atau$HOME/.config/systemd/user
tetapi tergantung pada izin dan situasinya.Yang benar adalah bahwa unit systemd (atau seperti kalimat intro menyebutnya, "konfigurasi unit") dapat pergi ke mana saja — terbukti Anda bersedia membuat symlink manual dan Anda menyadari peringatan. Itu membuat hidup lebih mudah untuk menempatkan unit di mana
systemctl daemon-reload
dapat menemukannya untuk beberapa alasan:systemctl enable
. Ini karena unit Anda secara otomatis akan ditambahkan ke pohon dependensi unit (cache unit).Bagaimana bisa tahu?
Dan bagaimana tepatnya
systemctl enable
tahu di mana membuat symlink? Anda membuat kode keras di dalam unit itu sendiri di bawah[install]
bagian. Biasanya ada garis sepertiyang sesuai dengan tempat yang telah ditentukan pada sistem file. Dengan cara ini,
systemctl
tahu bahwa unit ini bergantung pada sekelompok file unit yang disebutmulti-user.target
("target" adalah istilah yang digunakan untuk menunjuk grup ketergantungan unit. Anda dapat mencantumkan semua grup dengansystemctl list-units --type target
). Grup file unit yang akan dimuat dengan target dimasukkan ke dalamtargetname.target.wants
direktori. Ini hanya direktori yang penuh dengan symlink (atau yang asli). Jika Anda[Install]
bagian mengatakan itu adalahWantedBy
yangmulti-user.target
, tetapi jika symlink untuk itu tidak ada dalammulti-user.target.wants
direktori, maka tidak akan memuat. Ketika generator unit systemd menambahkan file unit Anda ke cache pohon dependensi saat boot (Anda dapat secara manual memicu generator dengansystemctl daemon-reload
), ia secara otomatis tahu di mana harus meletakkan symlink — dalam hal ini dalam direktori/etc/systemd/system/multi-user.target.wants/
haruskah Anda mengaktifkannya.Poin-Poin Utama dalam Manual:
Di bawah systemctl, cari Perintah File Unit
Jalur Muat File Unit
Tabel 1 dan Tabel 2 dari
man systemd.unit
baik.Muat jalur saat berjalan dalam mode sistem (
--system
)./etc/systemd/system
Konfigurasi lokal/run/systemd/system
Unit runtime/usr/lib/systemd/system
Unit paket yang diinstalMuat jalur saat berjalan dalam mode pengguna (
--user
)Ada perbedaan antara unit pengguna dan semua / unit pengguna global .
Tergantung pada pengguna
$XDG_CONFIG_HOME/systemd/user
Konfigurasi pengguna (hanya digunakan saat$XDG_CONFIG_HOME
diatur)$HOME/.config/systemd/user
Konfigurasi pengguna (hanya digunakan saat$XDG_CONFIG_HOME
tidak disetel)$XDG_RUNTIME_DIR/systemd/user
Unit runtime (hanya digunakan saat$XDG_RUNTIME_DIR
disetel)$XDG_DATA_HOME/systemd/user
Unit paket yang telah diinstal di direktori home (hanya digunakan saat$XDG_DATA_HOME
disetel)$HOME/.local/share/systemd/user
Unit paket yang telah diinstal di direktori home (hanya digunakan saat$XDG_DATA_HOME
tidak disetel)--global
(semua pengguna)Unit yang berlaku untuk semua pengguna - artinya dimiliki oleh setiap pengguna juga. Jadi setiap pengguna dapat menghentikan layanan ini bahkan jika administrator mengaktifkannya saat boot.
/etc/systemd/user
Konfigurasi lokal untuk semua pengguna (systemctl --global enable userunit.service
)/usr/lib/systemd/user
Unit paket yang telah diinstal di seluruh sistem untuk semua pengguna/run/systemd/user
Unit runtimeArea abu-abu
Di satu sisi, File Hierarchy Standard menetapkan itu
/etc
untuk konfigurasi lokal yang tidak menjalankan binari. Di sisi lain itu menentukan bahwa/usr/local/
"digunakan oleh administrator sistem ketika menginstal perangkat lunak secara lokal". Anda juga bisa berargumen (jika bukan hanya untuk tujuan organisasi) bahwa semua file unit sistem harus/usr/local/lib/systemd/system
dimasukkan, tetapi ini ditujukan untuk file unit yang merupakan bagian dari "perangkat lunak" bukan dari manajer paket. Unit-unit pengguna systemd terkait yang seluruh sistem bisa masuk/usr/local/lib/systemd/user
.sumber
/etc/systemd/system
, apakah itu saran umum untuk file unit yang dibuat sendiri? Apa pun yang diinstal oleh manajer paket harus selalu dimasukkan/usr/lib/systemd/system
sebagai contoh./etc/systemd/user
untuk layanan pengguna di seluruh sistem (dijamin) dan~/.config/systemd/user
untuk layanan khusus pengguna khusus./etc/systemd/system
adalah tempat Anda meletakkan skrip Anda , pacman menempatkan skrip paket/usr/lib/systemd/system
.Penerbitan
systemctl enable foo.service
menciptakan symlinks dari/usr
ke/etc
. Lihat bagian Unit Load Pathman systemd.unit(5)
untuk lebih detail.sumber
Saya telah menulis 3, satu untuk
ntpd
, satu untuk kartu ethernet kedua, statis, dan satu untuk menjalankanp0f
, pengenal OS pasif. Saya memasukkan semuanya/etc/systemd/system
. Sepertinya saya mungkin bisa membiarkansystemd
menangani hal-hal NTP, tapi saya pikir saya tidak ingin terlalu bergantung pada itu.sumber