Bagaimana saya bisa membuat "rc.local" berjalan saat startup?

75

Saya memiliki skrip yang ingin saya jalankan ketika sistem saya mulai. Saya telah meletakkannya di "rc.local", tetapi tidak berhasil. Bagaimana saya bisa mengaktifkannya untuk dijalankan saat startup?

pedroo
sumber
1
Di mana perintah xsetwacom? /etc/rc.local dijalankan dengan PATH yang sangat sederhana saat startup. Mungkin berbeda dari PATH yang Anda masuk di terminal. Di terminal, ketik: ketik -p xsetwacom kemudian ganti perintah "xsetwacom" di /etc/rc.local dengan path lengkap seperti yang dikembalikan oleh "type -p". Apakah Anda harus melakukan inisialisasi manual sebelum xsetwacom bekerja untuk Anda?
waltinator
3
Menggunakan systemd sebagai manajer startup, pastikan kompatibilitas rc.local berjalan:systemctl status rc-local.service
rubo77
komentar waltinator adalah masalah saya. Karena jalur minimal, ia tidak tahu cara menjalankan skrip yang ingin saya jalankan. Path yang dimuat di sistem Ubuntu 14.04 saya pada saat runninig /etc/rc.local adalah sebagai berikut: / sbin: / usr / sbin: / bin: / usr / bin ... Anda dapat memeriksa milik Anda dengan memasukkan echo $PATH > /home/rc_local_path/ etc / rc.local dan kemudian memeriksa file setelah dijalankan pada startup.
RaisinBranCrunch
Ingatlah bahwa jika skrip Anda perlu dijalankan terus menerus, Anda harus memulainya sebagai daemon dalam rc.localfile!
totymedli
Gunakan sudo systemctl enable rc-local.serviceuntuk memastikan bahwa /etc/rc.local dieksekusi selama startup server
William

Jawaban:

56

Bisakah Anda menjalankan skrip Anda secara manual? Jika tidak, itu masalah dengan skrip itu; kalau tidak lihat lebih banyak di rc.local. (Jika skrip itu perlu dijalankan sebagai root, Anda perlu menggunakan sudo untuk menjalankannya secara manual.)

Pastikan /etc/rc.local dapat dieksekusi dan skrip yang dipanggil juga dapat dieksekusi.

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 419 2010-08-27 11:26 /etc/rc.local

Pastikan rc.local memiliki garis shebang (yang merupakan default):

$ head -n1 /etc/rc.local
#!/bin/sh -e

sumber
Ya, saya bisa menjalankan skrip secara manual. Bagaimana saya bisa memastikan /etc/rc.local dapat dieksekusi? Apa yang harus saya ketik? Apakah itu "$ ls -l /etc/rc.local -rwxr-xr-x 1"? Terima kasih!
pedroo
@pedroo: Saya telah menyalin apa yang saya lihat di terminal saya (jadi Anda melihat prompt, input, dan output semua di atas). Perintahnya adalah "ls-l /etc/rc.local" dan jika itu dapat dieksekusi, itu akan memiliki Xs di output.
3
Saya sudah mencoba "ls-l /etc/rc.local" dan dapat dieksekusi, tetapi saya tidak dapat membuatnya berjalan saat startup ... Ada ide?
pedroo
1
@pedroo: Itu perlu server X berjalan, yang tidak terjadi ketika rc.local dijalankan. Menjalankannya dari rc.local hanya akan membuatnya keluar tanpa melakukan apa-apa (meskipun saya harap ini menempatkan pesan di syslog atau di tempat lain). Anda perlu meletakkan perintah xsetwacom di ~ / .xinitrc atau / etc / X / xinit / xinitrc sebagai gantinya.
1
@pedroo: Karena rc.local berisi perintah yang dimaksudkan untuk dijalankan pada waktu yang berbeda. Buat file baru, Anda bisa meletakkannya di ~ / bin , tandai itu dapat dieksekusi (chmod atau properti di Nautilus), buat baris pertama "#! / Bin / bash", lalu letakkan perintah Anda di baris selanjutnya.
53

Dalam kasus saya tidak ada instruksi yang merupakan solusi sempurna. Jika Anda sama sialnya dengan saya, coba yang detail ini

  1. Masukkan semua kode pelaksana Anda dalam file teks terpisah dengan nama arbitrer seperti foo.sh dan simpan di tempat sewenang-wenang.
  2. Menambahkan

    #!/bin/sh

    sebagai baris pertama dari kode Anda.

  3. Coba jalankan foo.sh Anda dengan

    sudo foo.sh

    untuk memeriksa tidak ada kesalahan sama sekali.

  4. Berikan /etc/rc.local script Anda dengan path lengkap dan nama script yang Anda buat setelah perintah sh

    sh '/path/to/your/script/foo.sh'
  5. Ingatlah untuk meletakkan baris di atas sebelum baris kode terakhir

    exit 0

    di akhir skrip /etc/rc.local.

  6. Periksa baris pertama dari /etc/rc.local menjadi

    #!/bin/sh -e
  7. Jadikan /etc/rc.local Anda dapat dieksekusi jika belum dieksekusi oleh

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
    
  8. Periksa semuanya bekerja dengan baik dengan mengeksekusi

    sudo /etc/init.d/rc.local start
  9. Tes restart sistem Anda.
shvahabi
sumber
6
Langkah # 8 adalah kuncinya, memverifikasi bahwa skrip akan berjalan di bawah lingkungan startup. Dalam kasus saya, saya perlu memberikan path lengkap ke perintah.
Peter Gluck
Prefek dan langkah ke langkah hebat, ini bekerja pada centos tetapi sudo /etc/rc.local startdijalankan pertama kali.
A1Gard
Terima kasih - penguraian ini sangat membantu saya dan seperti di atas langkah # 8 adalah kunci untuk saya juga! Tanpa itu woudn't redirect +1 (untuk referensi, aplikasi node berjalan di bitnami cloud server selamanya untuk menjalankan).
fidev
Langkah 8 adalah tip yang baik, Tapi saya pikir langkah 7 mungkin yang diperbaiki milik saya, saya mencoba menjalankan skrip menggunakan cron untuk membuka sebuah terowongan tetapi gagal secara acak
SeanClt
28

Pada versi Ubuntu yang lebih baru systemddigunakan dan /etc/rc.localtidak selalu dimuat secara default.

Periksa apakah layanan Kompatibilitas dimuat dengan

systemctl status rc-local.service

tangkapan layar

Jika itu berisi aktif (keluar) pengaturan Anda sepertinya baik dan Anda bisa memiliki kesalahan lain dalam /etc/rc.localfile Anda (ini bisa menjadi perintah yang gagal misalnya).

rubo77
sumber
4
jika rc-local.service tidak diaktifkan, periksa posting ini yang menjelaskan Cara Mengaktifkan /etc/rc.local dengan Systemd
yaitloutou
3

2 saran.

  1. Pastikan bahwa file skrip target juga ditandai dapat dieksekusi.
  2. Apakah skrip target menjalankan perintah sudo ? Jika demikian, Anda mungkin ingin memberikan kata sandi sudo kepadanya.

Salahku. Cukup periksa satu. Terima kasih atas enzim koreksi :)

Ankit
sumber
8
rc.localdijalankan sebagai root, jadi tidak perlu kata sandi.
enzotib