OK, jadi saya punya masalah sederhana: Saya punya CD langsung, dan saya ingin CD dikeluarkan ketika komputer di-boot ulang atau dihentikan.
Mengeksekusi /usr/bin/eject -m
membuat CD mengeluarkan ... masalah saja, seperti yang Anda perkirakan, ini akan merusak OS karena sekarang tidak dapat membaca file apa pun. Jadi reboot tidak pernah terjadi, karena /sbin/reboot
tidak dapat diakses. (Saya mencoba mengeksekusi reboot --help > /dev/null
tepat sebelum reboot, tetapi masih ada file lain yang masih belum dapat dibaca ...)
Singkatnya, tampaknya saya harus membuat eject menjadi hal terakhir yang terjadi. Jadi sepertinya itu systemd
adalah anak anjing yang harus saya mainkan ... Tapi saya telah membuang-buang waktu hidup saya dengan menusuk dan mendorongnya, dan tidak peduli apa yang saya lakukan, tidak pernah, dalam keadaan apa pun, benar-benar mengeluarkan CD. Dan saya tidak tahu kenapa. Saya sudah mencoba berbagai cara memohon eject
, tetapi tidak ada yang terjadi.
Adakah yang bisa memberitahuku cara paling sederhana untuk berlari eject
? (Saya bayangkan setelah umount.target
itu masuk akal ...)
eject
sana, Anda akan baik-baik saja?Jawaban:
Akhirnya kolega saya menemukan artikel berikut:
http://lists.freedesktop.org/archives/systemd-devel/2012-September/006573.html
Singkatnya, saya membuat file bernama
/lib/systemd/system/eject.service
yang berisiSaya juga harus berlari
systemctl enable eject.service
untuk membuat ini benar - benar melakukan apa pun. Tetapi sekarangsystemd
mengeluarkan CD tepat sebelum shutdown, persis seperti yang saya inginkan.... sayangnya OS masih segfault ketika tidak dapat menemukan sisa file dengan CD yang dikeluarkan. Saya mencoba menyesuaikan file di atas sehingga kami miliki
After=unmount.target
, yang Anda pikir menjalankan skrip setelah filesystem telah di-unmount. Tapi tidak, tetap saja segfault.Sepertinya saya harus mencari cara untuk menyalin gambar live CD ke dalam RAM saat boot - tetapi itu adalah pertanyaan lainnya ...
sumber
Berikut ini dapat membantu Anda:
Tambahkan perintah eject Anda di /etc/init.d/halt.local
Anda juga dapat melihat /etc/init.d/skeleton template dan menyesuaikan ini untuk mungkin menambahkan beberapa output misalnya sistem mematikan, tekan tombol apa saja untuk mengeluarkan cdrom dll.
Lihat skrip di /etc/init.d yang ditautkan ke dalam direktori runlevel /etc/rc0.d (berhenti).
sumber
Lihatlah skrip
/etc/init.d
yang terhubung ke dalam direktori runlevel/etc/rc0.d
(berhenti) dan/etc/rc6.d
(reboot). Sebagai contoh, saya memasukkan perintah eject/etc/init.d/reboot
dan berfungsi dengan baik.Tapi, saya tidak di CD Live jadi saya tidak bisa menguji apa yang akan berhasil.
Jika Anda memikirkannya, kira-kira seperti ini, sulit dibayangkan, memasukkan skrip atau bahkan biner yang dikompilasi. Bahkan sebuah biner membutuhkan beberapa alokasi / deallokasi overhead, dan segera setelah Anda mengeluarkan CD, Anda selesai. Sebaliknya, itu harus seperti bendera dan penunjuk ke instruksi mesin, disimpan dalam beberapa memori super-persisten ...
Mungkin lebih mudah untuk hanya menjalankan perintah dan sengaja crash OS, tetapi untuk melakukannya ketika hampir semua hal sedang offline, jadi tidak masalah bahwa Anda crash sistem yang tersisa.
(Sunting) Pikiran lain: Bisakah Anda mempartisi sistem file Anda, membuat partisi hanya untuk perintah eject dan reboot, unmount semua yang lain, kemudian jalankan perintah? (Tapi, mungkin kemudian fsck harus diberitahu untuk tidak mengeluh setiap waktu, bahwa partisi-eject tidak di-mount dengan benar.) Atau, bisakah Anda meletakkannya di USB stick? (Ini adalah masalah yang sangat menarik; jika Anda menyelesaikannya, beri tahu kami!)
(Sunting 2) Bagaimana dengan menggabungkan eject dan reboot, jadi Anda mendapatkan satu biner, ia dimuat ke dalam memori, mengeluarkan CD, tetapi tidak harus memuat reboot dari sistem file apa pun, ia sudah ada dalam memori utama?
sumber
ubuntu bisa digunakan
eject -m; reboot -f
sumber