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:
- Menggunakan lokasi standar berarti bahwa generator systemd akan menemukannya dan membuatnya mudah diaktifkan saat booting
systemctl enable
. Ini karena unit Anda secara otomatis akan ditambahkan ke pohon dependensi unit (cache unit).
- Anda tidak perlu memikirkan izin, karena hanya pengguna dengan hak istimewa yang dapat menulis ke area yang ditentukan.
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 seperti
[Install]
WantedBy = multi-user.target
yang sesuai dengan tempat yang telah ditentukan pada sistem file. Dengan cara ini, systemctl
tahu bahwa unit ini bergantung pada sekelompok file unit yang disebut multi-user.target
("target" adalah istilah yang digunakan untuk menunjuk grup ketergantungan unit. Anda dapat mencantumkan semua grup dengan systemctl list-units --type target
). Grup file unit yang akan dimuat dengan target dimasukkan ke dalam targetname.target.wants
direktori. Ini hanya direktori yang penuh dengan symlink (atau yang asli). Jika Anda [Install]
bagian mengatakan itu adalah WantedBy
yang multi-user.target
, tetapi jika symlink untuk itu tidak ada dalam multi-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 dengan systemctl 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:
Unit tambahan mungkin dimuat ke systemd ("ditautkan") dari direktori bukan pada jalur pemuatan unit. Lihat perintah tautan untuk systemctl (1).
Di bawah systemctl, cari Perintah File Unit
Jalur Muat File Unit
File unit diambil dari serangkaian jalur yang ditentukan selama kompilasi, dijelaskan dalam dua tabel di bawah ini. File unit yang ditemukan dalam direktori yang tercantum sebelumnya menimpa file dengan nama yang sama di direktori yang lebih rendah dalam daftar.
Ketika variabel $SYSTEMD_UNIT_PATH
diatur, konten variabel ini menimpa jalur beban unit. Jika $SYSTEMD_UNIT_PATH
diakhiri dengan komponen kosong (":"), jalur muatan unit biasa akan ditambahkan ke konten variabel.
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 diinstal
Muat 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 runtime
Area 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
.
/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
...