Как я могу запустить команду после загрузки?

27

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

Demi
источник
Все дистрибутивы 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, но это может быть больше, чем вы рассчитывали с вашим простым вопросом.

MariusMatutiae
источник
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/… bullet 3.2.4. Кроме того, он не существует в Arch Linux вообще, поэтому я подумал, что было бы безопасно включить предупреждение об этом.
MariusMatutiae
2
может быть, это неизвестный псевдоним для меня, но @bootон не существует, просто @reboot debianhelp.co.uk/crontab.htm
Заратустра
19

Если ваша система работает под управлением версии, cronкоторая ее поддерживает (в частности, Vixie cron), вы можете использовать ее @rebootв задании cron.

Это одна из 8 специальных строк, которые она поддерживает.

Цитирую crontab(5)man-страницу (из моей системы 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
@MariusMatutiae meta.stackoverflow.com/q/294543/827263
Кит Томпсон,
+1 за указание, что требуется Vixie cron.
Хавьер Ариас
10

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

Тем не менее, вам даже не нужно это делать. «Правильный» способ - изменить / добавить строку kernel.sysrq = 1 в /etc/sysctl.conf

davidgo
источник