Bagaimana saya bisa menjalankan perintah setelah boot?


27

Saya ingin menjalankan perintah shell sederhana echo 1 > /proc/sys/kernel/sysrqdi setiap boot, untuk mengaktifkan kunci sysrq. Kapan saat boot ini harus dilakukan, dan di mana saya harus meletakkan skrip untuk melakukannya?


Semua distribusi Linux sudah menentukan waktunya. Mungkin baterai ke RTC Anda pada motherboard rendah?
Beberapa programmer Bung

@ JoachimPileborg sebenarnya tidak ada RTC di motherboard saya :) Ini adalah board sistem tertanam tanpa RTC.


2
Saya mohon berbeda, @davidgo. Referensi yang Anda kutip sedikit usang: sementara crontab berfungsi, /etc/rc.local tidak pada systemddistro seperti Arch Linux. Dengan merujuk pada mereka, kita mungkin mengirim Demetri mengejar angsa liar. Beberapa pembaruan, kadang-kadang, perlu dilakukan.
MariusMatutiae

Jawaban:


37

Tergantung pada distro.

Jika Anda menggunakan distro yang berasal dari Debian, setidaknya ada dua tempat yang tepat, /etc/rc.local dan crontab. Anda dapat memanggil crontab sebagai root,

   crontab -e

dan kemudian masukkan baris ini

   @reboot /home/my_name/bin/my_command

di mana my_commandfile yang dapat dieksekusi ( chmod 755 my_command).

Atau, Anda dapat menempatkan garis seperti ini

   /home/my_name/bin/my_command

di /etc/rc.local, dan ini akan dieksekusi terakhir. Bagaimanapun, tolong ingat Anda menggunakan lingkungan root, bukan milik Anda. Juga untuk alasan ini, yang terbaik adalah menggunakan jalur absolut.

Jika Anda menggunakan distro systemd (Arch Linux, Fedora 19, ...) opsi pertama (crontab) masih valid, sedangkan yang kedua (/etc/rc.local) tidak ada lagi. Dalam hal ini, Anda harus belajar cara memulai layanan yang akan dijalankan systemctl, tetapi ini mungkin lebih dari yang Anda tawar-menawar dengan pertanyaan sederhana Anda.


1
Bisakah Anda mengkonfirmasi ini untuk Fedora? Pencarian saya memberi tahu saya bahwa rc.local masih akan berjalan jika ada dan dapat dieksekusi, tetapi tidak diatur secara default. Saya merasakan konsekuensi yang mengganggu jika rc.local tidak berjalan! (Saya hanya bisa menemukan referensi untuk ini untuk Fedora 18 - forums.fedoraforum.org/showthread.php?t=291889 )
davidgo

Anda benar, di Fedora 19 Anda mungkin masih memilikinya, jika Anda benar-benar menginginkannya. Tapi itu tidak lagi dikemas, docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/… bullet 3.2.4. Juga, itu tidak ada di Arch Linux sama sekali, jadi saya pikir aman untuk memasukkan peringatan tentang itu.
MariusMatutiae

2
mungkin ini alias tidak diketahui untuk saya tetapi @boottidak ada, hanya @reboot debianhelp.co.uk/crontab.htm
Zarathustra

19

Jika sistem Anda menjalankan versi cronyang mendukungnya (khususnya Vixie cron), Anda dapat menggunakannya @rebootdalam pekerjaan cron.

Ini adalah salah satu dari 8 string khusus yang didukungnya.

Mengutip crontab(5)halaman manual (dari sistem Ubuntu 12.04 saya):

Alih-alih lima bidang pertama, satu dari delapan string khusus dapat muncul:

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

Harap dicatat bahwa startup, sejauh @rebootyang berkaitan, adalah waktu ketika cron (8) daemon startup. Secara khusus, mungkin sebelum beberapa daemon sistem, atau fasilitas lainnya, adalah startup. Ini karena urutan urutan boot mesin.

Ini jauh dari menjadi satu - satunya cara untuk menjalankan sesuatu pada saat boot, tetapi ini merupakan alternatif.


2
Bagaimana jawaban ini telah ditulis lebih dari setahun sebelum pertanyaan awal?
MariusMatutiae


+1 untuk menentukan yang memerlukan cron Vixie.
Javier Arias

10

Hampir semua varian Linux (akan kembali sangat lama) memiliki file /etc/rc.local yang berjalan saat startup - Anda bisa menambahkan perintah ke dalamnya.

Yang mengatakan, Anda bahkan tidak perlu melakukan itu. Cara "benar" adalah dengan memodifikasi / menambahkan baris kernel.sysrq = 1 ke /etc/sysctl.conf

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.