Pertanyaan Mengapa perintah di /etc/rc.local tidak dijalankan saat startup?


Saya memiliki satu perintah di saya /etc/rc.local skrip yang seharusnya memulai daemon pembaruan untuk Tiny Tiny RSS saat startup, tetapi skrip tidak dijalankan saat startup. Mengapa?

Seluruh file /etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet

exit 0

/etc/rc.local dapat dieksekusi:

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local

/etc/init.d/rc.local ada dan dapat dieksekusi:

# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27  2012 /etc/init.d/rc.local

/etc/init.d/rc.local seharusnya dijalankan saat startup untuk runlevel ini:

# runlevel 
N 2
# ls -l /etc/rc2.d/S99rc.local 
lrwxrwxrwx 1 root root 18 Sep 22  2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local

Jika saya secara manual memanggil /etc/rc.local dari baris perintah, pembaruan_daemon memuat ...

# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet

... yang harus saya ingat untuk dilakukan setiap kali server saya restart sampai masalah ini diperbaiki.

Serupa  pertanyaan  sudah ada, tetapi sejauh ini saya tidak dapat menerapkan informasi ke dalam masalah khusus saya.

Mengapa perintah di rc.local tidak dijalankan saat startup?


34
2018-05-25 06:52


asal


Mungkin karena itu requiretty pengaturan. Ketika Anda masuk, Anda menjalankan skrip di TTY tetapi selama boot sistem, itu tidak dalam TTY. Tautan ini dapat membantu Anda shell-tips.com/2014/09/08/… Terima kasih. - KICT


Jawaban:


rc.local skrip keluar jika ada kesalahan saat menjalankan salah satu perintahnya (sebutkan -e bendera masuk #!/bin/sh -e).

Ada kemungkinan bahwa beberapa prasyarat tidak terpenuhi ketika Anda mencoba untuk menjalankan perintah Anda kapan rc.local eksekusi berlangsung, sehingga eksekusi perintah Anda gagal.

Saya mengalami hal yang sama saat mengatur gubernur cpu secara manual dan gagal melakukannya rc.local. Berikut adalah solusi khusus saya, yang menggunakan update-rc.d untuk membuat perintah Anda berjalan saat startup:

  1. Buat file myscript.sh dalam direktori /etc/init.d dengan judul: #!/bin/sh 
  2. Masukkan perintah kustom Anda sebagai konten
  3. Jadikan itu dapat dieksekusi: sudo chmod +x /etc/init.d/myscript.sh
  4. Buat symlink untuk skrip Anda untuk berbagai runlevel: sudo update-rc.d myscript.sh defaults

Juga, Anda bisa memeriksanya /etc/network/if-up.d skrip dan lihat apakah Anda bisa memicu perintah ketika jaringan dimulai.


20
2018-03-08 19:09



Terima kasih atas jawabannya. Pengaturan saya telah berubah sejak saya memposting pertanyaan, jadi saya tidak dapat menguji apakah jawaban Anda akan menyelesaikan masalah. - x-x


mencoba sudo sysv-rc-conf dan periksa apakah rc.local diaktifkan

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]

4
2018-05-25 09:30



Ya, sudah diaktifkan. - x-x
apakah perintah ini harus diinstal? - jcollum
@jcollum ya, ini adalah program dari paket yang bernama sama. Untuk menginstal, ketik sudo apt install sysv-rc-conf - banan3'14


Kami memiliki masalah ini pada beberapa server host yang memuat aturan FW.

Pada kotak-kotak ini mereka melakukan reboot dengan sangat cepat dan kami menemukan hanya menempatkan "tidur 1" di rc.local sebelum pernyataan beban tampaknya memperbaiki masalah. Saya kira itu memberikan sedikit waktu untuk antarmuka untuk menyelesaikan sebelum memuat aturan FW.


2
2017-12-04 12:27



Terima kasih. sleep 1 memecahkan masalah saya. Menarik Saya memiliki banyak server tetapi hanya satu yang memiliki masalah ini. - Elgs Qian Chen


Pastikan skrip rc.local dapat dieksekusi:

sudo chmod +x /etc/rc.local

Kemudian, aktifkan:

sudo systemctl enable rc-local.service

Nyalakan ulang sistem atau mulai skrip secara manual dengan menjalankan:

sudo systemctl start  rc-local.service

Status layanan dapat ditampilkan dengan menjalankan:

$ sudo systemctl status rc-local.service
● rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) 
Drop-In: /lib/systemd/system/rc-local.service.d
           └─debian.conf
   Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
  Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 2049 (svscanboot)
Tasks: 3
 Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service

2
2018-04-02 13:48



Anda tidak perlu mengaktifkan layanan secara manual. Jika file ada dan dapat dieksekusi, systemd akan secara otomatis mengaktifkan rc-local layanan. - muru


Saya punya masalah serupa di rc.local tidak mengeksekusi saat startup

sshades memberi saya jawaban berikut:

Ubuntu sekarang menggunakan systemd, dan rc.local sekarang dianggap sebagai sebuah layanan yang "mati" secara default. Anda dapat mengaktifkan rc.local "on" dengan memasukkan perintah berikut dan me-reboot:

sudo systemctl enable rc-local.service

https://askubuntu.com/a/770033/395498

Meskipun saya belum menguji solusinya, saya pikir itu terdengar logis dan akan berhasil. Namun:

Saya juga menemukan solusi yang menambahkan skrip ke ./.config/autostart-scripts/ akan melakukan trik


2
2018-05-14 19:34



Dapatkan kesalahan ini. File-file unit tidak memiliki konfigurasi instalasi (WantedBy, RequiredBy, Also, Alias ​​settings di bagian [Install], dan DefaultInstance for template unit). Ini berarti mereka tidak dimaksudkan untuk diaktifkan menggunakan systemctl. Kemungkinan alasan untuk memiliki jenis unit ini adalah: 1) Sebuah unit dapat diaktifkan secara statis dengan menjadi symlink dari direktori unit lain .wants / atau .requires /. 2) Tujuan suatu unit mungkin untuk bertindak sebagai penolong untuk beberapa unit lain yang memiliki ketergantungan pada persyaratannya. - Rıfat Erdem Sahin


Saya pernah mengedit rc.local dengan Notepad di Windows dan mulai mengalami masalah ini.

Dalam hal ini, menggunakan editor teks mendukung EOL Conversion, seperti Notepad ++, untuk mengonversi gaya EOL ke 'Unix', dapat menyelesaikannya.

Anda juga bisa melakukannya :set ff=unix di Vim.


1
2018-03-07 17:15





Anda harus memastikan itu /etc/rc.local dijalankan saat startup server dengan perintah:

sudo systemctl enable rc-local.service


0
2017-11-17 10:34