Мне нужно загружать компьютер несколько сотен раз в день, чтобы провести производственное тестирование компьютерной периферии.
У меня есть тестовая система Ubuntu 16, где я запустил sudo systemctl set-default multi-user.target
для загрузки в текстовом режиме. Мне все еще нужно нажать Alt kbd> - F1 kbd>, чтобы запустить первый tty. Затем я должен войти в систему, а затем sudo
my test.sh
и снова ввести пароль.
Что я действительно хотел, так это нажать на выключатель питания и увидеть некоторую информацию о прохождении / сбое, а затем снова выключиться.
Тестовый скрипт загружает соответствующий драйвер, затем запускает тестовую программу, поэтому ему требуются привилегии суперпользователя.
Я попробовал кое-что, но это с треском провалилось. Я не думаю, что инструкции были для Ubuntu 16.04.
Спасибо !!!
Чтобы загрузить непосредственно с tty1, удалите splash
из следующей строки в /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
... и выполните sudo update-grub
. [ 1115]
Чтобы запретить systemd
порождать getty
в tty1, замаскируйте соответствующий сервис:
sudo systemctl mask getty@tty1.service
Создайте следующий файл, который вы можете назвать как вам нравится, конечно:
/etc/systemd/system/example.service
[Unit]
Description=Example tty1 service
After=multi-user.target
[Service]
Type=idle
ExecStart=/bin/bash /bin/example.sh
StandardOutput=tty
StandardInput=tty
TTYPath=/dev/tty1
[Install]
WantedBy=multi-user.target
Эта служба будет запущена после достижения multi-user.target
, запустите /bin/example.sh
и используйте tty1 для ввода и вывода.
Запустите следующую команду, чтобы включить службу:
sudo systemctl enable example.service
Я не знаю, что делает ваш скрипт, но вот пример, который ждет нажатия клавиши и выключает компьютер (вы можете все еще переключайтесь на другой tty):
/bin/example.sh
#!/bin/bash
echo Press any key to shutdown
read -n 1 -s -r
poweroff
exit 0
В качестве пользователя root создайте исполняемый файл /etc/rc.local. В него можно помещать любые команды, сценарии оболочки и т. Д. Я предполагаю, что то, что вы делаете, не является интерактивным. Если это так, не забудьте перенаправить вывод и ошибки в соответствующие файлы. Файл rc.local должен иметь «выход 0» в конце. Поместите ваши команды между первой и последней строкой.
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0