Моя цель : Выполнить сценарий оболочки после входа в систему, который выполняется с привилегиями root и принимает соответствующий ввод пользователя из терминала. заключительное окно, чтобы определить его следующий образ действий.
Скрипт : Скрипт, который я запускаю, сообщает пользователю, что второй скрипт будет автоматически запущен через 60 секунд, если пользователь не введет s или S. Обратный отсчет отображает оставшееся время. Если пользователь ввел правильную команду выхода, сценарий завершится, и система продолжит работу в обычном режиме. Если в течение 60 секунд ничего действительного не введено, запускается второй сценарий.Второй сценарий также должен выполняться от имени пользователя root (поэтому первый сценарий должен запускаться как root), поскольку у него есть сторожевой таймер, который выполняет жесткую перезагрузку системы в случае аппаратного сбоя.
Bash Script :
#! / Bin / bash
# Подсказывать пользователю информацию.
echo "Майнер начнется через 60 секунд."
echo "Нажмите s + enter, чтобы остановить процесс и возобновить нормальную работу."
# Объявить переменные.
input = "a"
let seconds = 60
# Ждать ввода пользователя и обратного отсчета.
в то время как [$ секунды -gt 0]; do
printf "\r........."$seconds
read -s -t 1 input
let "seconds-=1"
if [ "$input" = "s" ] || [ "$input" = "S" ]; then
break
fi
done
echo
# Инициировать выбор пользователя
if ["$ input" = "s"] || ["$ input" = "S"]; then
echo "Resuming normal operation."
sleep 2
else
echo "Starting miner."
sleep 2
./TeamRedMiner_Config.sh
fi
Цель : Этот сценарий предназначен для перезапуска программы майнинга после того, как сторожевой таймер перезапустит систему в случае отказа графического процессора. Приглашение пользователя дает мне время остановить выполнение майнера после входа в систему, если я хочу использовать систему как обычно. Обычно я вдали от системы, поэтому это очень важно для продолжения майнинга. Отказ графического процессора довольно распространен после двух с лишним дней работы (несмотря на пониженную частоту, пониженное напряжение и т. Д.) Для одной из моих карт, поскольку она уже очень стареет (более 6 лет).
Я провел много исследований и еще не нашел решения, которое помогло бы мне. Большинство из них сосредоточены на выполнении сценария, который не требует внешнего ввода или окна терминала. Если да, то это всего лишь несколько команд. Мне нужно что-то, что запускает окно терминала, чтобы я мог видеть подсказки и обратный отсчет. Кроме того, мне нужно окно терминала для отображения статуса майнера после его запуска.
То, что я пробовал : Начальные условия: Файл .sh, исполняемый и принадлежит пользователю root.
Надеюсь, это показывает, что я добавил приложите немало усилий, и мы сможем найти решение этой проблемы. Спасибо!
Следующий метод должен работать для вас, чтобы автоматически запускать экран
при запуске компьютера. Измените файлы шаблонов из этого ответа, чтобы они соответствовали вашему идентификатору пользователя и имени файла программы сторожевого таймера.
Примечание: я предлагаю вам запускать не все сценарии как root
, а только сторожевой таймер (специально вызываемый с помощью sudo во втором сценарии. Это означает, что вы должны разрешить выполнение с NOPASSWD)
сторожевого таймера (устанавливается через visudo
).
~ / .config / autostart / shield.desktop
[Desktop Entry]
Name=shield at tester
Comment=Shield only for testing
Exec=/home/tester/bin/shield
Terminal=false
Type=Application
StartupNotify=true
X-GNOME-Autostart-enabled=true
См. эту ссылку , в которой описано, как создать программа запускается автоматически, когда компьютер достигает рабочего стола при загрузке с Lubuntu 20.04.x LTS.
./ bin / shield
#!/bin/bash
xterm -display :0 -fullscreen -fa default -fs 16 -e bash -c \
'
tme=10 # grace period in seconds before mining starts
echo "Stop? (s/q) "
while [ "$tme" -gt "0" ]
do
echo -n "$tme "
tme=$((tme-1))
read -t1 -n1 ans
if [ "$ans" == s ] || [ "$ans" == S ] \
|| [ "$ans" == q ] || [ "$ans" == Q ];then
echo " - the computer is yours"
sleep 2
exit
fi
done
echo " - auto-action, mining starts"
echo "$ sudo -H parted -ls # demo with program needing sudo"
sudo -H parted -ls
while true
do
echo -n "."
read -t1 -n1 -s an2
if [ "$an2" != "" ];then
echo " - mining stopped, the computer is yours"
sleep 3
exit
fi
done'
sudo
должен вызывать ваш сторожевой таймер вместо parted
tme
от 10 до 60 (секунд). / etc / sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
%tester ALL=NOPASSWD: /usr/sbin/parted
Последняя строка (и пустая строка) добавляется к файлу по умолчанию. Измените его для своего идентификатора пользователя и имени вашей сторожевой программы.
Следующие ссылки объясняют, как отредактировать файл sudoers
с помощью visudo
:
-rwxrwxr-x tester/tester 649 2021-07-26 15:14 ./bin/shield
-rwxrwxr-x tester/tester 181 2021-07-26 14:47 ./.config/autostart/shield.desktop
-r--r----- root/root 795 2021-07-26 14:19 etc/sudoers
Это сработало для меня, когда я тестировал. Вы можете изменить разрешения и владельца. Но это не должно быть рискованным, если вы ограничиваете функцию NOPASSWD
сторожевой программой.
полноэкранный и выглядит следующим образом Когда вы прерываете его во время льготного периода перед майнингом:
Когда вы позволяете ему начать майнинг, здесь моделируется с помощью parted
] и точки ( .....
), и, наконец, остановите добычу, чтобы использовать компьютер для других целей:
Вы можете изменить размер текста xterm
окно из -fs 16
.