Mengaktifkan file unit 'tertaut' di Systemd

10

Saya masih mendapatkan pegangan dengan systemd dan telah mengalami sesuatu. Ini bukan masalah, tapi saya ingin belajar lebih banyak tentang cara ini. Saya tidak dapat menemukan referensi untuk ini di tempat lain.

Pertama, saya mengerti bahwa file unit kustom untuk layanan harus masuk /etc/systemd/system. Namun, akan lebih baik untuk manajemen server kami jika file unit dapat ditemukan di tempat lain.

Dalam dokumentasi, saya melihat bahwa Anda dapat 'menautkan' file unit seperti:

systemctl link /path/to/servicename.service

Ini akan membuat tautan ke atas di /etc/systemd/system. Anda sekarang dapat memulai / menghentikan layanan ini. Di permukaan, ini sepertinya cara yang baik bagi kami untuk mengelola layanan kami.

Namun, mencoba mengaktifkan file unit 'tertaut' tersebut menyebabkan kegagalan:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

Dengan menggunakan file unit yang sama persis, tetapi disalin ke dalam /etc/systemd/systembukannya ditautkan, Anda mendapatkan:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

Dari ini, tampaknya tidak mungkin untuk mengaktifkan file unit yang ditautkan untuk dipanggil saat startup sistem.

Jika ini masalahnya, apa gunanya fungsi 'tautan'? Dari dokumen, dikatakan:

tautan FILENAME

Tautkan file unit yang tidak ada di jalur pencarian file unit ke jalur pencarian file unit. Ini membutuhkan jalur absolut ke file unit. Efek dari ini dapat dibatalkan dengan menonaktifkan. Efek dari perintah ini adalah bahwa file unit tersedia untuk memulai dan perintah lain meskipun tidak diinstal secara langsung di jalur pencarian unit.

Tom17
sumber

Jawaban:

13

Halaman manual itu menyesatkan.

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

Yang pertama memungkinkan Anda untuk melakukannya systemctl start myservice. Yang kedua memungkinkan untuk myservicememulai secara otomatis (yang, seperti yang ditunjukkan oleh @Julien, secara otomatis menambahkan link).

Saya pikir ... Saya sudah mencoba membungkus kepala saya sepanjang hari ini.

Auspex
sumber
1
perhatikan itu systemctl enablejuga akan dilakukan systemctl link, jadi tidak perlu mengetik 2 perintah ;-)
Julien
@ Julien Oh, di mana kita Anda ketika saya menulis ini tahun lalu :-) Saya pikir saya akhirnya menyadari itu bulan lalu!
Auspex
9

Saat mengaktifkan layanan dari jalur lain selain jalur default, Anda harus menggunakan jalur lengkap. Aktifkan juga akan membuat tautan untuk Anda:

systemctl enable /root/myservice.service

Setelah diaktifkan, Anda dapat memulai / menghentikan / status dengan nama layanan

systemctl start myservice

Beberapa peringatan di sini:

Nickvane
sumber