Як я можу запустити команду після завантаження?


27

Я хотів би виконати просту команду оболонки echo 1 > /proc/sys/kernel/sysrqпри кожному завантаженні, щоб включити клавіші sysrq. Коли під час завантаження це потрібно робити, і куди мені слід поставити сценарій для цього?


У всіх дистрибутивах Linux вже встановлено час. Можливо, заряд батареї до вашого RTC на материнській платі є малою?
Якийсь програміст чувак

@JoachimPileborg насправді на моїй материнській платі немає RTC :) Це вбудована системна плата без RTC.


2
Прошу різнитися, @davidgo. Посилання, які ви цитуєте, є застарілими: поки crontab працює, /etc/rc.local не працює на systemdдистрибутивах, як Arch Linux. Посилаючись на них, ми можемо відправити Деметри на погоню за дикими гусками. Деякі оновлення, часом, потрібно зробити.
MariusMatutiae

Відповіді:


37

Залежить від дистрибутивів.

Якщо ви перебуваєте в дистрибутивах, отриманих від Debian, є щонайменше два належні місця, /etc/rc.local та crontab. Ви можете викликати crontab як root,

   crontab -e

а потім вставити цей рядок

   @reboot /home/my_name/bin/my_command

де my_commandвиконуваний файл ( chmod 755 my_command).

Крім того, ви можете розмістити такий рядок

   /home/my_name/bin/my_command

в /etc/rc.local, і це буде виконано останньо. У будь-якому випадку, пам’ятайте, що ви використовуєте кореневе середовище, а не своє. Також з цієї причини найкраще використовувати абсолютні шляхи.

Якщо ви перебуваєте в системному дистрибутиві (Arch Linux, Fedora 19, ...), перший варіант (crontab) все ще діє, тоді як другий (/etc/rc.local) вже не існує. У цьому випадку ви повинні навчитися запускати послугу, якою керуєте systemctl, але це може бути більше, ніж ви торгувались своїм простим питанням.


1
Чи можете ви підтвердити це для Fedora? Мій пошук говорить мені, що rc.local все ще буде працювати, якщо він існує та виконується, але не встановлений за замовчуванням. Я відчув тривожні наслідки, якщо rc.local не працює! (Я міг знайти лише посилання на це для Fedora 18 - forums.fedoraforum.org/showthread.php?t=291889 )
davidgo

Ви маєте рацію, у Fedora 19, можливо, все ще є, якщо ви цього дуже хочете. Але це більше не пакується, docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/… куля 3.2.4. Крім того, він не існує в Arch Linux взагалі, тому я вважав за безпечне включити попередження про це.
MariusMatutiae

2
можливо це невідомий псевдонім для мене, але @bootвін не існує, просто @reboot debianhelp.co.uk/crontab.htm
Заратустра

19

Якщо у вашій системі працює версія, cronяка її підтримує (зокрема, Vixie cron), ви можете використовувати @rebootв роботі cron.

Це одна з 8 спеціальних рядків, які він підтримує.

Цитуючи crontab(5)чоловічу сторінку (з моєї системи Ubuntu 12.04):

Замість перших п'яти полів може з'явитися один з восьми спеціальних рядків:

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 * * * *".

Зауважте, що запуск, наскільки @rebootце стосується, - це час запуску демона cron (8) . Зокрема, це може бути до запуску деяких демонів системи чи інших засобів. Це пов’язано з послідовністю порядку завантаження машини.

Це далеко не єдиний спосіб запустити щось під час завантаження, але це альтернатива.


2
Як ця відповідь була написана за рік до початкового запитання?
MariusMatutiae


+1 для уточнення, що потрібен крон Vixie.
Хав'єр Аріас

10

Практично всі варіанти Linux (повертаючись довго-довго) мають файл /etc/rc.local, який працює при запуску - ви можете просто додати команду до нього.

Однак це вам навіть не потрібно робити. "Правильним" способом було б змінити / додати рядок kernel.sysrq = 1 у /etc/sysctl.conf

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