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?
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.
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 4192010-08-2711:26/etc/rc.local
Pastikan rc.local memiliki garis shebang (yang merupakan default):
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
Masukkan semua kode pelaksana Anda dalam file teks terpisah dengan nama arbitrer seperti foo.sh dan simpan di tempat sewenang-wenang.
Menambahkan
#!/bin/sh
sebagai baris pertama dari kode Anda.
Coba jalankan foo.sh Anda dengan
sudo foo.sh
untuk memeriksa tidak ada kesalahan sama sekali.
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'
Ingatlah untuk meletakkan baris di atas sebelum baris kode terakhir
exit 0
di akhir skrip /etc/rc.local.
Periksa baris pertama dari /etc/rc.local menjadi
#!/bin/sh -e
Jadikan /etc/rc.local Anda dapat dieksekusi jika belum dieksekusi oleh
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
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).
systemctl status rc-local.service
echo $PATH > /home/rc_local_path
/ etc / rc.local dan kemudian memeriksa file setelah dijalankan pada startup.rc.local
file!sudo systemctl enable rc-local.service
untuk memastikan bahwa/etc/rc.local
dieksekusi selama startup serverJawaban:
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.
Pastikan rc.local memiliki garis shebang (yang merupakan default):
sumber
Dalam kasus saya tidak ada instruksi yang merupakan solusi sempurna. Jika Anda sama sialnya dengan saya, coba yang detail ini
Menambahkan
sebagai baris pertama dari kode Anda.
Coba jalankan foo.sh Anda dengan
untuk memeriksa tidak ada kesalahan sama sekali.
Berikan /etc/rc.local script Anda dengan path lengkap dan nama script yang Anda buat setelah perintah sh
Ingatlah untuk meletakkan baris di atas sebelum baris kode terakhir
di akhir skrip /etc/rc.local.
Periksa baris pertama dari /etc/rc.local menjadi
Jadikan /etc/rc.local Anda dapat dieksekusi jika belum dieksekusi oleh
Periksa semuanya bekerja dengan baik dengan mengeksekusi
sumber
sudo /etc/rc.local start
dijalankan pertama kali.Pada versi Ubuntu yang lebih baru
systemd
digunakan dan/etc/rc.local
tidak selalu dimuat secara default.Periksa apakah layanan Kompatibilitas dimuat dengan
Jika itu berisi aktif (keluar) pengaturan Anda sepertinya baik dan Anda bisa memiliki kesalahan lain dalam
/etc/rc.local
file Anda (ini bisa menjadi perintah yang gagal misalnya).sumber
2 saran.
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 :)
sumber
rc.local
dijalankan sebagai root, jadi tidak perlu kata sandi.