Як я можу зробити «rc.local» запуск при запуску?


75

У мене є сценарій, який я хотів би запустити при запуску системи. Я поставив це на "rc.local", але він не працює. Як я можу включити його при запуску?


1
Де команда xsetwacom? /etc/rc.local виконується за допомогою дуже простого PATH при запуску. Це, мабуть, відрізняється від PATH, який ви зареєстрували в терміналі. У терміналі введіть: type -p xsetwacom, а потім замініть команду "xsetwacom" в /etc/rc.local на повний шлях, який повертається "type -p". Чи потрібно робити якісь ручні ініціалізації, перш ніж xsetwacom працює для вас?
waltinator

3
Використовуючи systemd як диспетчер запуску, переконайтеся, що сумісність rc.local працює:systemctl status rc-local.service
rubo77

коментар waltinator був моєю проблемою. Через мінімальний шлях він не знав, як запустити сценарії, які я хотів запустити. Шлях, завантажений моєю системою Ubuntu 14.04 під час runninig /etc/rc.local, був таким: / sbin: / usr / sbin: / bin: / usr / bin ... Ви можете перевірити своє, ввівши echo $PATH > /home/rc_local_pathу свій / і т.д. / rc.local, а потім перевірка файлу після запуску при запуску.
RaisinBranCrunch

Майте на увазі, що якщо ваш сценарій потребує постійного запуску, вам потрібно запустити його як демон у rc.localфайлі!
totymedli

Використовуйте sudo systemctl enable rc-local.serviceдля забезпечення /etc/rc.local виконання під час запуску сервера
Вільям

Відповіді:


56

Чи можете ви запустити свій скрипт вручну? Якщо ні, то проблема з цим сценарієм; інакше дивіться більше на rc.local. (Якщо цей скрипт повинен запускатися як root, для його запуску вручну потрібно використовувати sudo.)

Переконайтесь, що /etc/rc.local виконується, і що сценарій, який він викликає, також виконується.

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

Переконайтеся, що у rc.local є лінія shebang (яка є типовою):

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

Так, я можу запустити сценарій вручну. Як я можу переконатися, що /etc/rc.local виконується? Що я маю набрати? Це "$ ls -l /etc/rc.local -rwxr-xr-x 1"? Дякую!
педро

@pedroo: Я скопіював саме те, що я бачу в своєму терміналі (так ви бачите підказку, введення та вихід все вище). Команда "ls -l /etc/rc.local", і якщо вона виконується, вона матиме ці Xs у висновку.

3
Я спробував "ls -l /etc/rc.local", і він виконується, але я не можу змусити його працювати при запуску ... Будь-яка ідея?
педро

1
@pedroo: Для цього потрібен запущений X-сервер, що не відбувається, коли виконується rc.local. Запуск його з rc.local просто змусить його вийти, не роблячи нічого (хоча я сподіваюся, що він поміщає повідомлення в syslog або деінде). Вам потрібно помістити команди xsetwacom у ~ / .xinitrc або / etc / X / xinit / xinitrc.

1
@pedroo: Оскільки rc.local містить команди, призначені для виконання в інший час. Створіть новий файл, ви можете помістити його в ~ / bin , позначити його виконуваним (chmod або властивості в Nautilus), зробити перший рядок "#! / Bin / bash", після чого розмістити свої команди на пізніших рядках.

53

У моєму випадку жодна інструкція не була ідеальним рішенням. Якщо вам не пощастило, як я, спробуйте цю детальну

  1. Помістіть увесь свій виконавчий код в окремий текстовий файл з довільним іменем, таким як foo.sh, і збережіть його у довільному місці.
  2. Додайте

    #!/bin/sh

    як перший рядок коду.

  3. Спробуйте виконати foo.sh за допомогою

    sudo foo.sh

    щоб перевірити, чи немає помилок взагалі.

  4. Надайте сценарію /etc/rc.local повний шлях та назву створеного сценарію після команди sh

    sh '/path/to/your/script/foo.sh'
  5. Не забудьте поставити вищезазначений рядок перед останнім рядком коду

    exit 0

    наприкінці сценарію /etc/rc.local.

  6. Перевірте перший рядок /etc/rc.local

    #!/bin/sh -e
  7. Зробіть свій /etc/rc.local виконуваним у випадку, якщо він уже не виконується

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
    
  8. Перевірте, чи все працює добре, виконавши

    sudo /etc/init.d/rc.local start
  9. Перевірте перезавантаження системи.

6
Крок № 8 був ключовим, підтверджуючи, що сценарій буде працювати в середовищі запуску. У моєму випадку мені потрібно дати повний шлях до команди.
Пітер Глюк

Префект і крок до кроків великого, він працює на центосах, але sudo /etc/rc.local startспочатку запустити.
A1Gard

Дякую - ця розбиття дуже допомогла для мене, і як вище, крок №8 був ключовим для мене! Без цього він не переспрямував би +1 (для довідки, додаток вузла, що працює на хмарному сервері bitnami, використовуючи навіки для постійного запуску)
fidev

Крок 8 був гарною підказкою, але я думаю, що крок 7 міг би бути тим, що було виправлено моїм, я намагався запустити сценарій, використовуючи cron, щоб відкрити тунель, але він вийшов випадковим чином
SeanClt

28

У нових версіях Ubuntu systemdвикористовується і /etc/rc.localне завантажується завжди за замовчуванням.

Перевірте, чи завантажено службу сумісності

systemctl status rc-local.service

скріншот

Якщо він містить активний (вийшов), ваш параметр здається нормальним, і у вас може виникнути ще одна помилка у вашому /etc/rc.localфайлі (це може бути команда, яка не працює).


4
якщо rc-local.service не активовано, перевірте цю публікацію, де пояснюється, як увімкнути /etc/rc.local за допомогою Systemd
yaitloutou

3

2 пропозиції.

  1. Переконайтесь, що цільовий файл сценарію також позначений як виконуваний.
  2. Чи працює цільовий скрипт командою sudo ? Якщо так, можливо, ви захочете надати йому пароль sudo.

Моє ліжко. Просто перевірте його тоді. Дякуємо за виправлення enzotib :)


8
rc.localзапускається як root, тому пароль не потрібен.
enzotib
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.