Я хочу создать сценарий, который будет работать на запуске 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
. Затем я:
CTRL
+ ALT
+ F2
для наблюдения tty2
.sudo service lightdm stop
для отключения GUI.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
строка, но тем не менее ничего не происходит (никакой файл не создается).
По некоторым причинам теперь я вижу все файлы в каталоге /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
, Я замечаю текст "Привет мир!" наверху (до приглашения ко входу в систему).
Единственная проблема состоит в том, чтобы понять:
Почему сценарий выполняется на значении по умолчанию 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 только.
Какие-либо идеи, что продолжается?
Я понимаю теперь - runlevel Ubuntu отличаются от стандартов, видят:
http://upstart.ubuntu.com/cookbook/#runlevels
Это означает это runlevels 2
кому: 5
являются всеми одинаковыми:
Графический многопользовательский плюс сетевой (ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ)
Я понимаю теперь - 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-стиля.)
/etc/inittab
вещь прошлого.. Часто, Учитывая Ответы.