Получение скрипта для запуска при загрузке, а не при входе в систему

11

Как я могу заставить определенный скрипт запускаться (желательно не как суперпользователь) всякий раз, когда машина загружается, но до входа в систему. Это может быть последнее, что запускается при загрузке. В основном я просто хочу, чтобы скрипт работал, даже если пользователь не вошел в систему.

Malabarba
источник
1
@bruce принять вид этого -> askubuntu.com/questions/9382/...
hhlp
1
Вы можете использовать upstart или cron или, возможно, целый ряд других методов. Также важно знать, как рано он может работать. Например, нужно ли монтировать определенную файловую систему, нужен ли X для запуска, нужен ли DBus, нужен ли он для работы в сети - или, более того, нужны ли ему какие-либо ресурсы?
JanC
@JanC: Да, на самом деле, нужно почти все, что вы просили (кроме X), поэтому я бы хотел, чтобы это было последнее, что нужно запустить. Там действительно нет никаких причин, чтобы запустить его раньше.
Малабарба,
@hhlp: Круто, спасибо. Но как скоро скрипт запустится, если я воспользуюсь этим методом? Как я уже упоминал выше, лучше всего, если это одна из самых последних вещей (до входа в систему).
Малабарба
Что ж, для входа в систему не требуется работа в сети, если только вы не хотите войти на сервер терминалов и / или у вас нет $ HOME на сетевом ресурсе ... ;-)
JanC 27.10.10

Ответы:

8

Я бы порекомендовал использовать cron. Специальное значение времени @rebootбудет порождать вашу работу при каждой перезагрузке в качестве вашего пользователя. Например, запустите crontab -eи используйте:

@reboot /home/yourself/bin/some_script_to_run

Для получения дополнительной информации о специальных форматах времени см. man 5 crontab

Кис Кук
источник
Спасибо, это кажется достаточно простым. Это не зависит от того, какой пользователь создает право cronjob? Он запускается в конце загрузки независимо от логинов?
Малабарба
Это абсолютно зависит от того, кто создал cronjob - он будет работать от имени этого пользователя. Но это не зависит от них, чтобы войти в систему.
Kees Cook
Имейте в виду, что при запуске демона cron этот скрипт запускается настолько, что другие системы, которые могут вам понадобиться, еще не готовы.
PhoneixS
4

Одна возможность - использовать Upstart. Это позволяет вам указать, когда вы хотите запустить ваш скрипт с точки зрения зависимостей, например, «когда файловые системы смонтированы, а сетевой интерфейс eth0запущен и работает». Создайте файл /etc/init/bruce_script.conf(вам нужно создать его как root), содержащий что-то вроде этого:

description "Bruce's boot script"
start on filesystem and net-device-up IFACE=eth0
task
exec su -c '/home/bruce/script' bruce

Обратитесь к документации по upstart для получения дополнительной информации, в частности к init(5)странице руководства, чтобы получить список того, что вы можете поместить в этот файл конфигурации.

Жиль "ТАК - перестань быть злым"
источник
Есть ли список событий upstart, которые можно использовать?
воскресенье
@Markus: не то, что я знаю. Стандартные события имеют справочную страницу в разделе 7 (так dpkg -L upstart |grep /man7/), и вы можете посмотреть на события, испускаемые и используемые как триггеры в существующих сценариях в /etc/init.
Жиль "ТАК - перестань быть злым"