Cara menonaktifkan layanan tanpa menggunakan 'systemctl disable'

12

Ada layanan yang saya ingin jalankan hanya ketika layanan lain gagal ( [Unit] OnFailure=foo), tetapi saya tidak ingin layanan ini ( foo) memulai secara otomatis saat boot. Satu opsi sedang berjalan systemctl disable foo, tetapi saya sedang mencari cara lain.

Latar Belakang: Saya membuat gambar OS, dan saya tidak ingin harus mem-boot mesin, jalankan perintah itu ( systemctl disable foo), lalu matikan sebelum menyatakan gambar saya final.

tepang
sumber

Jawaban:

4

Semua layanan "dinonaktifkan" secara default; "pemberdayaan" adalah ikut serta.

Jika foo.servicelayanan khusus Anda, maka itu tidak akan dimulai kecuali ditarik secara eksplisit oleh sesuatu (seperti OnFailure=arahan), dan Anda tidak boleh "menonaktifkan" apa pun.

intelfx
sumber
Jadi pada dasarnya Anda "mendapatkan fungsi ini secara gratis" kecuali foo telah diaktifkan sebelumnya?
rogerdpack
26

systemctl enablebekerja dengan memanipulasi symlink di /etc/systemd/system/(untuk daemon sistem). Saat Anda enablemenggunakan layanan, layanan ini akan melihat WantedBybaris di [Install]bagian tersebut, dan membuka symlink di .wantsdirektori tersebut.

systemctl disable melakukan yang sebaliknya.

Anda bisa menghapus symlink tersebut — melakukannya dengan tangan sepenuhnya setara dengan menggunakan systemctl disable.

derobert
sumber
Ini akan menjadi layanan yang belum dijalankan oleh systemd (itu adalah kebiasaan), jadi tidak akan ada symlink tambahan. Saya kira itu akan dibuat pada boot pertama?
tshepang
3
@Tepang tidak seharusnya diaktifkan kecuali jika Anda mengaktifkannya secara manual (atau dalam skrip, tentu saja)
derobert
1
Oh, saya berasumsi itu akan diaktifkan secara otomatis (sesuatu yang saya harapkan dengan menginstal paket Debian). Senang mendengarnya.
tshepang
3
@ Tunas itulah skrip postinst dalam paket yang melakukan aktifkan. Atau saya kira pengiriman symlink dalam paket, tidak yakin apakah mereka melakukan itu.
derobert
4

Anda dapat menggunakan systemctl start ServiceName.servicedan systemctl stop Service.Name.servicememulai dan menghentikan layanan masing-masing. Berbeda dengan systemctl enable ...dan systemctl disable ..., perintah mulai dan berhenti hanya bertahan untuk sesi saat ini, oleh karena itu ketika Anda me-reboot mesin perubahan tidak akan disimpan.

tepang
sumber