сценарии init не работают

Я хочу создать сценарий, который будет работать на запуске runlevel 3 только однажды.
Поэтому теперь я выполняю тесты, чтобы видеть, работает ли выполнение действительно.

Я пытался создать файл в /etc/init.d/myscript это содержит:

#!/bin/bash

OUT="/dev/tty1"

echo -e "Hello world!" > $OUT

ps auxf > /path_to_some_folder/_script_ps_auxf.txt
runlevel > /path_to_some_folder/_runlevel.txt
id -u > /path_to_some_folder/id.txt
pwd > /path_to_some_folder/pwd.txt

Тому файлу включили бит выполнения для всех пользователей (ugo).
Также я создал символьную ссылку на /etc/init.d/myscript в /etc/rc3.d/S99myscript. Затем я:

  1. выход из системы моего пользователя.
  2. пресса CTRL + ALT + F2 для наблюдения tty2.
  3. Войдите в систему моего пользователя и sudo service lightdm stop для отключения GUI.
  4. Затем sudo init 3 чтобы быть в runlevel 3.

Но файлы в /path_to_some_folder/ не существуйте после init 3. Почему?


Я попробовал также несколько других изменений вышеупомянутого - включая использование update-rc.d.


Кроме того, я пытался отредактировать /etc/rc.local таким образом, что код в /etc/init.d/myscript встраивается в /etc/rc.local до exit 0 строка, но тем не менее ничего не происходит (никакой файл не создается).


Обновление 6 октября, 18:00 UTC:

По некоторым причинам теперь я вижу все файлы в каталоге /path_to_some_folder/:
(Я добавил ко всем файлам подчеркивание _ для различения их лучше из других файлов),

$ ls /path_to_some_folder/_*
/path_to_some_folder/_id.txt  /path_to_some_folder/_pwd.txt  /path_to_some_folder/_runlevel.txt  /path_to_some_folder/_script_ps_auxf.txt

Контролем их времени они все создаются, когда система включается.

Контролем файла /path_to_some_folder/_script_ps_auxf.txt, Я заметил, что процесс init был запущен:

/bin/bash /etc/init.d/myscript start

Поэтому я понимаю, что init сценарии работают. Действительно, когда я нажимаю CTRL + ALT + F1 для наблюдения tty1, Я замечаю текст "Привет мир!" наверху (до приглашения ко входу в систему).

Единственная проблема состоит в том, чтобы понять:

  1. Почему они работают теперь?
  2. Почему сценарий выполняется на значении по умолчанию runlevel Ubuntu 16.04?
    Они должны быть выполнены только в runlevel 3, видеть:

    $ ls -1 /etc/rc*.d/*myscript*
    /etc/rc3.d/S99myscript
    

Ответ на вопрос № 1 самостоятельно:
Я подозреваю, что перезапуск требовался для init сценариев работать.

О вопросе № 2:

Файл /etc/inittab не делает существует, поэтому это не может определить runlevel:

$ ls /etc/inittab
ls: cannot access '/etc/inittab': No such file or directory

Значение по умолчанию runlevel, согласно /etc/init/rc-sysinit.conf, 2:

$ grep -m 1 DEFAULT_RUNLEVEL= /etc/init/rc-sysinit.conf
env DEFAULT_RUNLEVEL=2

Нет никаких параметров командных строк ядра согласно файлу /etc/default/grub:

$ less /etc/default/grub | grep GRUB_CMDLINE_LINUX=
GRUB_CMDLINE_LINUX=""

Когда я включаю свой ПК и вхожу в моего пользователя, я замечаю, что мой runlevel 5:

$ runlevel
N 5

Мой сценарий, как предполагалось, работал в runlevel 3 только.

Какие-либо идеи, что продолжается?


Обновление 6 октября, 18:40 UTC:

Я понимаю теперь - runlevel Ubuntu отличаются от стандартов, видят:
http://upstart.ubuntu.com/cookbook/#runlevels

Это означает это runlevels 2 кому: 5 являются всеми одинаковыми:

Графический многопользовательский плюс сетевой (ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ)

1
задан 6 October 2016 в 20:44

1 ответ

Я понимаю теперь - runlevel Ubuntu отличаются от стандартов, видят: http://upstart.ubuntu.com/cookbook/#runlevels

Нет, на самом деле Вы не понимаете.

Вы работаете с умственной моделью операционной системы, которая была дважды заменена на Ubuntu. Выскочка была представлена справедливое небольшое количество несколько лет назад; и версия, которую Вы используете теперь (16.04), заменила даже это.

Вы используете Ubuntu 16.04, systemd операционную систему. Уровни выполнения являются "устаревшими" согласно systemd doco. Можно забыть о них. Новомодная Поваренная книга и страницы руководства для выскочки init не подавайте заявку (если Вы явно не переключились назад на выскочку).

Вы не должны бездельничать с /etc/rc.local. Это от rc система, которая предшествовала van Smoorenburg rc система, что Вы ошибочно думаете, что используете теперь. Это - механизм, который был заменен три раза. /etc/inittab вещь прошлого, также. Ubuntu не имела van Smoorenburg init в течение десятилетия.

Вы используете Ubuntu 16.04. Не начинайте с Версии 6 UNIX rc или van Smoorenburg rc; опасайтесь начинать с новомодных файлов задания; забудьте о van Smoorenburg init; и забудьте об уровнях выполнения. Сделайте systemd сервисную единицу и узнайте о целях.

(Или установите daemontools, или daemontools-вызов-на-бис, или freedt, или runit, или еду, или perp или s6, и узнайте о сервисах daemontools-стиля.)

Дальнейшее чтение

5
ответ дан 3 December 2019 в 06:38

Другие вопросы по тегам:

Похожие вопросы: