Sebagai contoh, saya memiliki layanan bernama di mysshd.service
bawah /usr/lib/systemd/system/
direktori. Dapatkah saya membuat tautan simbolis seperti:
ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service
sehingga operasi apa pun yang saya lakukan dengan fool.service akan tercermin ke mysshd.service
( systemctl enable/disable start/stop fool.servce
)?
Tujuan saya adalah menimpa layanan sshd asli dengan tautan simbolis dari layanan sshd saya sendiri.
Jawaban:
Sejauh yang saya tahu, systemd tidak akan menangani hal ini dengan baik. Seperti yang saya pahami, Anda ingin mengesampingkan perilaku
sshd.service
, kan?Beruntung bagi Anda, systemd dirancang untuk hal semacam ini. Cukup masukkan definisi layanan Anda
/etc/systemd/system/ssh.service
, jalankansystemctl daemon-reload
untuk memuat kembali file unit, dan systemd akan secara otomatis menggunakan konfigurasi itu daripada sistemssh.service
.Ingin punya
systemctl enable mysshd.service
pekerjaan juga? Tidak masalah. Di[Install]
bagian file unit Anda, tambahkan baris yang mengatakanAlias=mysshd.service
. Kemudian jalankansystemctl reenable ssh.service
untuk memiliki systemd memperbaiki unit symlink, dan Anda emas.Sekarang, Anda belum memberikan perincian tentang apa
mysshd.service
yang seharusnya dilakukan. Jika itu sama sekali berbeda dari normalssh.service
, bagus! Gunakan metode di atas. Namun, jika Anda hanya ingin mengubah satu hal kecil, maka Anda menggunakan pendekatan yang salah. systemd memungkinkan Anda membuat "potongan" file unit yang akan diterapkan di atas file unit normal. Ini memungkinkan Anda menambah atau mengabaikan arahan individu sambil memungkinkan sisa file unit menerima pembaruan dari manajer paket. Untuk melakukan ini, cukup buat/etc/systemd/system/ssh.d/my-custom-config.conf
(Anda dapat mengubahnyamy-custom-config.conf
menjadi apa pun yang Anda inginkan, dan Anda juga dapat memiliki beberapa file override). Dalam file itu, tempatkan arahan apa pun yang ingin Anda ubah atau tambahkan ke yang biasassh.service
. Anda bahkan dapat menambahkanAlias=
arahan, sehinggasystemctl start mysshd.service
berhasil! Ingatlah untuk mengeksekusisystemctl daemon-reload
setelah Anda selesai (dan, jika Anda gunakanAlias=
,systemctl reenable ssh.service
).Selain itu, jangan pernah mengubah file unit systemd di
/usr/lib/systemd
. Pernah! Standar Hierarki Filesystem mengharuskan yang/usr
diperlakukan sebagai hanya-baca. Dalam praktiknya, ini berarti bahwa manajer paket menangani/usr
(kecuali untuk/usr/local
), dan Anda tidak menyentuh apa yang ditangani manajer paket - terutama karena apa pun yang Anda ubah mungkin pada akhirnya akan ditimpa. Sebaliknya, letakkan barang-barang Anda di suatu tempat seperti/etc
.sumber
foo.service
, jalankansudo systemctl edit foo.service
, dan itu akan menghemat apa pun yang Anda ketikkan/etc/systemd/system/foo.service.d/override.conf
.Alias=
arahan TIDAK berfungsi dalam menimpa file. Lihat github.com/systemd/systemd/issues/1090systemctl edit
saat saya menulis jawaban ini. jangan ragu untuk mengedit jawaban saya untuk mencerminkanAlias=
bug (masukkan "OK dengan penjawab" atau sesuatu dalam pesan edit). tangkapan yang bagus.Gunakan
link
dengan path lengkap:Perhatikan bahwa Anda tidak dapat menautkan file layanan yang dengan sendirinya sudah berupa tautan.
sumber
Symlinks dulu tidak mungkin . Tetapi mereka sampai hari ini.
sumber