Я хотел бы запланировать команду для запуска после перезагрузки на компьютере с Linux. Я знаю, как это сделать, чтобы команда последовательно запускалась после каждой перезагрузки с @reboot
записью crontab, однако я хочу, чтобы команда запускалась только один раз. После запуска он должен быть удален из очереди команд для запуска. По сути, я ищу Linux-эквивалент RunOnce в мире Windows.
В случае, если это имеет значение:
$ uname -a
Linux devbox 2.6.27.19-5-default #1 SMP 2009-02-28 04:40:21 +0100 x86_64 x86_64 x86_64 GNU/Linux
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
$ cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 0
Есть ли простой способ сделать это?
linux
scheduled-task
Кристофер Паркер
источник
источник
Ответы:
Создайте
@reboot
запись в вашем crontab для запуска скрипта с именем/usr/local/bin/runonce
.Создайте структуру каталогов
/etc/local/runonce.d/ran
с использованиемmkdir -p
.Создайте скрипт
/usr/local/bin/runonce
следующим образом:Теперь поместите любой скрипт , который вы хотите запустить при следующей перезагрузке (только один раз) в каталоге
/etc/local/runonce.d
иchown
иchmod +x
его соответствующим образом . После запуска вы обнаружите, что он перемещен вran
подкаталог, а дата и время добавлены к его имени. Там также будет запись в вашемsyslog
.источник
man logger
.$file
содержать переменную полный путь или только имя файла?Я действительно ценю усилия, приложенные к ответу Денниса Уильямсона . Я хотел принять это как ответ на этот вопрос, поскольку это элегантно и просто, однако:
Я думаю, что его решение было бы замечательно в качестве встроенной функции дистрибутива Linux.
При этом я написал свой собственный сценарий, чтобы выполнить более или менее то же самое, что и решение Денниса. Он не требует каких-либо дополнительных шагов настройки и не требует root-доступа.
Сохраните этот скрипт (например:
runonce
),chmod +x
и запуск:В случае опечатки вы можете удалить команду из очереди runonce с флагом -r:
Использование sudo работает так, как вы ожидаете. Полезно для запуска сервера только один раз после следующей перезагрузки.
Некоторые заметки:
источник
Создать например
/root/runonce.sh
:Добавить к
/etc/rc.local
:источник
Установите скрипт в /etc/rc5.d с помощью S99 и после его запуска удалите его.
источник
Вы можете сделать это с помощью
at
команды, хотя я заметил, что вы не можете (по крайней мере на RHEL 5, на которой я тестировал) использоватьat @reboot
илиat reboot
, но вы можете использоватьat now + 2 minutes
и тогдаshutdown -r now
.Это не требует, чтобы ваша система работала более 2 минут.
Это может быть полезно, когда вы хотите установить 0, хотя я бы предпочел, чтобы команда runonce была стандартным комплектом.
источник
atd
остановки, ваша команда может выполняться во время выключения. Этого можно избежать, остановившисьatd
перед выполнением команды с помощью,atd now
а затем перезагрузившись.Я думаю, что этот ответ является самым элегантным:
Поместите скрипт в
/etc/init.d/script
и удалите его с последней строки:rm $0
Если сценарий не на 100% безошибочен, возможно, целесообразно обрабатывать исключения, чтобы избежать фатальной ошибки.
источник
Раньше
chkconfig
моя система автоматически запускала скрипт один раз после загрузки и никогда больше. Если ваша система использует ckconfig (Fedora, RedHat, CentOs и т. Д.), Это будет работать.Сначала скрипт:
run-once
/etc/init.d/
chkconfig run-once on
При загрузке системы ваш скрипт будет запускаться один раз и никогда больше.
То есть никогда больше, если вы этого не хотите. Вы всегда можете повторно включить скрипт с помощью
chkconfig run-once on
команды.Мне нравится это решение, потому что оно помещает один и только один файл в систему, и потому что команда run-Once может быть повторно введена при необходимости.
источник
в системах redhat и debian вы можете сделать это из /etc/rc.local, это своего рода autoexec.bat.
источник