Bagaimana melakukannya dengan systemd
Jika Anda menemukan utas ini setelah Juni 2016, Ubuntu dan turunannya termasuk Mint akan menggunakan systemd untuk mengontrol inisialisasi dan penutupan sistem. Saya punya masalah dengan pendekatan lama sehingga meneliti cara systemd.
Dengan systemd Anda membuat satu atau dua file untuk memanggil skrip Anda menggunakan templat di bawah ini, dan menjalankan perintah. Sederhana.
Versi GUI
Pertama buat skrip yang ingin Anda jalankan saat startup dan / atau shutdown. Saya membuat .scopening_atstart dan .scfullcopy_atend.
Kemudian pastikan keduanya dapat dieksekusi dengan mengklik kanan file, memilih properti dan memastikan bahwa, di bawah izin, Anda telah mencentang Izinkan mengeksekusi file sebagai program.
Dua file yang saya buat mengisi dan menyimpan konten ramdisk. Mereka juga membuat file di direktori rumah saya untuk membuktikan bahwa layanannya berfungsi. Mereka adalah bentuk:
#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time
Kemudian saya membuka file manager saya sebagai root, membuka /etc/systemd/system
dan membuat file startup.service dan file save-ramdisk.service. Jelas Anda dapat memilih nama Anda sendiri dan nama generik dapat menyertakan file startup yang disebut johns_start.service dan file shutdown yang disebut johns_shutdown.service. Hanya saja, jangan memilih nama layanan yang ada.
[Unit]
Description=Startup Applications
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart
[Install]
WantedBy=multi-user.target
dan
[Unit]
Description=Save Ramdisk to Wine drive C
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend
[Install]
WantedBy=multi-user.target
Anda dapat menggunakan file layanan yang sama, menggantikan jalur lengkap skrip yang dapat dieksekusi untuk saya.
Akhirnya untuk masing-masing jalankan perintah systemctl aktifkan your_files_name (tetapi tanpa layanan akhiran). Jadi yang pertama adalahsystemctl enable startup
Nyalakan kembali komputer satu kali untuk memulai layanan. Layanan mulai akan dijalankan setiap kali systemd memasuki target multi-pengguna dan layanan berhenti ketika keluar dari target multi-pengguna. File layanan alternatif dengan berbagai kondisi aktivasi akan dijelaskan di bawah ini.
Versi CLI (Command Line)
Deskripsi ini mengasumsikan bahwa Anda beroperasi dari direktori home Anda daripada / home / john, gunakan sudo sesuai kebutuhan, dan editor pilihan Anda tempat saya menulis vim atau svim.
Buat skrip startup dan shutdown shell dengan baris pertama #!/bin/sh
dan buat agar dapat dieksekusi menggunakan chmod +x my_new_filename
.
Buat dua file seperti di atas, atau dalam contoh ini, satu file untuk menangani tugas-tugas startup dan shutdown. Saya akan menjalankan skrip di direktori home saya tetapi @don_crissti menunjukkan beberapa alternatif di Stack Exchange.
svim /etc/systemd/system/start_and_stop.service
dan salin dalam konten file:
[Unit]
Description=Run Scripts at Start and Stop
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands #your paths and filenames
ExecStop=/home/john/.shutdown_commands
[Install]
WantedBy=multi-user.target
Kemudian Aktifkan Layanan dengan perintah:
systemctl enable start_and_stop
dan reboot sistem Anda setelah itu layanan akan aktif. Perintah systemctl is-enabled start_and_stop
dan systemctl is-active start_and_stop
dapat digunakan dalam memonitor layanan baru Anda.
Mengubah Kondisi Pemicu Shutdown
File-file di atas semua menggunakan buka atau tutup lingkungan multi-pengguna untuk memulai menjalankan skrip. File di bawah ini menggunakan awal dari empat proses mematikan potensial untuk memulai skripnya. Menambahkan atau menghapus target pada baris Sebelum + baris WantedBy akan membuat Anda membuat perbedaan yang lebih baik:
File ini diusulkan dalam jawaban di Unix & Linux oleh @Matthias tapi saya tidak bisa menjalankannya sampai saya menambahkan bagian Instal.
Sekali lagi, edit skrip di /etc/systemd/service/
dan aktifkan menggunakan systemctl enable your_file_name
. Ketika saya mengubah target saya menggunakan systemclt disable file_name
perintah dan kemudian mengaktifkannya kembali yang menghubungkannya dengan direktori target. Reboot dan layanan akan beroperasi.
[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/home/john/.my_script #your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target