Intereting Posts
Linux Mint 18.3 x64 нет Wi-Fi после чистой установки Как перезаписать Linux Mint 13 с 17.1 с Windows 8.1 двойной битой? gksu -S запрашивает пароль только один раз, даже если он настроен на три раза в конфигурации sudo Ошибка CUPS Принтер не отвечает Не удается установить параметр «-o remount» на общем ресурсе NFS для работы в Slackware 13.1 Это действительно официальный сайт для DirectFB? Почему максимальный PID в 64-битной системе Linux 2 ^ 22? Выполнение задания Cron в неправильный день Как увеличить загрузку / использование CPU в Solaris 10 для тестирования nagios? Может кто-нибудь объяснить, как использовать flock и файловые дескрипторы для блокировки файла и записи в заблокированный файл? Почему использование кота в двоичных файлах испортило терминал и как? сравнить 2 столбца из 2 разных CSV-файлов Установите Linux из dvd в dead windows 7 machine Замена части строки другой частью той же строки Запись перед курсором

Абортная задача при запуске на Ubuntu 14.04

У меня есть виртуальная машина, которая должна загружаться, выполнять определенную задачу, а затем закрываться.

Также должно быть возможно прервать специальную последовательность запуска, чтобы получить «обычное» поведение при загрузке, то есть либо до запуска приложения, либо до выключения.

Я попытался выполнить это, используя следующее в /etc/rc.local :

 #!/bin/bash trap "echo;echo Resuming regular system startup...;exit" SIGINT echo "Press Ctrl+C within 10 seconds to skip application run..." sleep 10 su ubuntu -c /home/ubuntu/application.py echo "Press Ctrl+C within 30 seconds to abort shutdown..." sleep 30 shutdown -h now 

Это работает нормально и работает так, как ожидалось, когда я просто выполняю его непосредственно как /etc/rc.local как root при входе в систему, но, похоже, он не работает, когда он фактически запускается как часть запуска системы. Он работает отлично, но он не реагирует на Ctrl + C, чтобы фактически быть отменен.

SSH: во время выполнения этого скрипта и выдачи killall -INT rc.local также, похоже, не останавливает выполнение скрипта, killall -9 rc.local действительно останавливает его, и он killall -9 rc.local консоль.

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

 root@fundie:~# ps 1 PID TTY STAT TIME COMMAND 1 ? Ss 0:01 /sbin/init root@fundie:~# /sbin/init --version init (upstart 1.12.1) Copyright (C) 2006-2014 Canonical Ltd., 2011 Scott James Remnant This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

Что мне не хватает?

Мне удалось обойти эту проблему, используя Plymouth , которая представляет собой приложение, которое предоставляет графический экран «всплеск» при загрузке и выключении системы Ubuntu. Я смог использовать это, чтобы получить SIGINT, отправленный на скрипт rc.local по кругу.

Это немного взломать, но вот что я в итоге сделал:

 #!/bin/bash plymouth watch-keystroke --command="kill -INT $$" --keys=' ' & trap "echo;echo Resuming regular system startup...;exit" SIGINT for i in `seq 10 -1 1` do echo -ne "\rPress spacebar within $i second(s) to skip application run... " sleep 1 done echo su ubuntu -c /home/ubuntu/application.py for i in `seq 30 -1 1` do echo -ne "\rPress spacebar within $i second(s) to abort shutdown... " sleep 1 done echo shutdown -h now 

Это будет служить для моих целей.