Мне нужно немного узнать о системе init.d в Linux (Ubuntu 12.04, 64 бит, в моем случае), я нашел сотни сайтов (нет, я не просматривал их все, но я читал некоторые из них), которые скажите мне, как написать сценарий init.d и как создать символическую ссылку в /etc/rc2.d. Мне все еще не хватает понимания и способности создавать запросы Google, которые могут дать мне нужные ответы. Так,
Я знаю, что мой скрипт init.d запускается. У меня есть сообщения журнала эха в файл, поэтому я знаю, что он запущен, например. до запуска любого пользователя .profile. Вопрос в том, какова природа среды, в которой он выполняется. Что происходит с выводом, отправленным в STDOUT? Он куда-то пишет в виртуальный терминал? Это на что-нибудь влияет?
"Программа", которую я действительно хочу запустить из сценария init.d, - это сценарий оболочки, my_shell_script, обернутый вокруг моей настоящей программы, моя_программа. Скрипт устанавливает множество переменных среды, включая ДОРОЖКА и LD_LIBRARY_PATH, затем запускает моя_программа.
Должен ли я изменить строку, которая запускает моя_программа перенаправить его выходы в / dev / null? Ditto STDERR? Должна ли строка запуска иметь NULL <1 (или это NULL <& 1?), Чтобы STDIN отключился?
В моем сценарии init.d, когда я хочу запустить сценарий оболочки, как правильно его называть?
my_shell_script
или
. my_shell_script
или
sh my_shell_script
и следует ли использовать sh или bash. Я думаю, использовать тот, который нужен для того, чтобы скрипт работал? т.е. bash, если там есть не-sh bash?
Когда скрипт init.d пытается запустить my_shell_script нужно ли делать то же перенаправление для STDIN, STDERR и STDOUT?
Изначально my_program разрабатывался как программа, запускаемая через терминал с одним графическим окном. Основная программа запускает графическое окно, затем запускает два xterms с отдельными программами, работающими в них (я не знаю почему, я унаследовал его). Все три программы работают вечно, но не являются демонами: просто бесконечные циклы. Основная программа следит за работой двух других и перезапускает их, если они все же остановятся.
Должны ли запускаться программы демонов? Или приложения без завершения работы в порядке? На стартовой линии в my_shell_script rmd с &, чтобы сценарий мог продолжить работу после запуска и вернуться к сценарию init.d?
моя_программа, обнаруживает, что графическое окно могло / не запускалось (поэтому я мог telnet / ssh на сервер, на котором оно запущено, и (повторно) запустить его). Если он не запускал окно графического интерфейса пользователя, он запускает две другие дочерние программы в том же окне терминала (telnet), и весь графический вывод отправляется в виде неграфического текстового вывода на этот терминал и файлы журнала.
Когда я вводил ssh / telnet на свой сервер разработки, .профиль будет работать, .профиль содержит почти все my_shell_script содержит, за исключением того, что он использует экран программа для запуска моя_программа чтобы выход из сеанса telnet / ssh не прервал выполнение моя программа. Нужна ли мне программа для экрана? моя_программа в схеме init.d.
Будет ли среда init.d выглядеть как терминал? Я предполагаю, что это похоже на среду уровня запуска 1, и окно графического интерфейса не может открыться, и что "терминал" является единственным выходом.
Наконец, как лучше всего остановить мои запущенные приложения? Прямо сейчас, когда они запускаются как пользовательские приложения, я использую killall, чтобы у них не было возможности сказать им, чтобы они закрылись.
http://upstart.ubuntu.com/cookbook/
Upstart - это система инициализации Ubuntu. Поваренная книга должна быть полезной.
Если вы хотите подключиться к терминалу, запущенному из системы инициализации, вы, скорее всего, захотите попробовать tmux.