Я создал свой первый сценарий инициализации на сервере Linux (ubuntu, если он добавляет какую-либо информацию), который проверяет наличие обновлений, загружает их и выполняет каждый час. Файл инициализации выглядит следующим образом:
/etc/init/updater.conf
start on (filesystem and stopped udevtrigger)
stop on runlevel [06]
console output
respawn
script
chvt 6
chvt 7
while true; do
# code to check update ...
if [ should_update ]; then
# Download the script
chmod +x /path/to/script.sh
bash /path/to/script.sh
rm /path/to/script.sh
fi
echo 'Rechecking for updates in 1h...'
sleep 1h
done
end script
Скачанный скрипт запускается следующим образом:
script.sh
#!/bin/bash
clear
exec > >(tee -i /var/log/update.log)
exec 2>&1
ScriptLoc=$(readlink -f "$0")
# check for root privilege
if [ "$(id -u)" != "0" ]; then
echo " This script must be run as root" 1>&2
echo
exit 1
fi
LOG_OUTPUT=/dev/tty4
(some_time_consuming_command 2>&1 > $LOG_OUTPUT) & spinner &!
Ожидаемое поведение состоит в том, что после завершения установки Linux нажатие добавит updater.conf
к /etc/init
что будет сделано, то после установки Linux перезагрузится и отобразит сообщение «Здравствуйте, я буду ...», затем счетчик, подобный этой настройке [-]
при перенаправлении вывода some_time_consuming_command
в TTY4
Однако текущее поведение заключается в том, что Linux перезагружается на черном экране (TTY7) и ничего не отображается, когда я переключаюсь на TTY1, я вижу: «Здравствуйте, я начну сообщение об установке». Я не понимал этого поведения.
Может ли кто-нибудь помочь мне добиться ожидаемого поведения?
РЕДАКТИРОВАТЬ: Немного прочитав, я обнаружил, что / dev / tty7 обычно используется по умолчанию из-за связанного / dev / console в нем. Я прав? Может ли кто-нибудь объяснить, почему TTY7 вообще используется по умолчанию? И я ищу отображение вывода инициализации в / dev / console вместо / dev / tty7?