Автоматический вход пользователя в TTY при загрузке, а затем автоматический запуск команд на экране GNU

Автоматический вход пользователя в TTY при загрузке, а затем автоматический запуск команд на экране GNU

Ubuntu 14.04.5 LTS

Желаемая функциональность: Удаленный сервер Ubuntu загружается и автоматически запускает текущий процесс как указанный пользователь. Затем я могу войти удаленно позже и просмотреть прошлые и текущие выходные данные текущего процесса.

Текущий план:

Автоматизированные шаги:

  1. Пользователь «ubuntu» автоматически входит в терминал (TTY) при загрузке:

    "sudo nano /etc/init/tty1.conf"
    
    Change: exec /sbin/getty -8 38400 tty1
    
    To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
    
  2. Пользователь «ubuntu» запускает GNU screen:

    screen -d -m -S screenname
    
  3. Пользователь «ubuntu» запускает текущий процесс в GNU screen:

    screen -S screenname -p 0 -X stuff "command^M"
    

Ручные действия, выполняемые позднее:

  1. Я вхожу в систему удаленно как пользователь «ubuntu» в другом терминале (TTY).
  2. Я повторно подключаюсь к сеансу GNU screen, начатому на шаге 2:

    screen -r
    
  3. Я могу просматривать прошлые и текущие результаты процесса, начатого на шаге 3.

Вопросы:

  • Является ли это наиболее эффективным способом достижения желаемого результата?
  • Как можно автоматизировать команды на шагах 2 и 3?
  • Как команды в шаге 2 и 3 могутнетактивировать, когда я вхожу вручную на шаге 4?

решение1

Ответы(на мои собственные вопросы)

  • Является ли это наиболее эффективным способом достижения желаемого результата?
    Я все еще не уверен, являются ли приведенные ниже решения наиболее эффективными, но могу подтвердить, что они, по крайней мере, работают на указанной версии Ubuntu.
  • Как можно автоматизировать команды на шагах 2 и 3?
  • Почему команды на шаге 2 и 3 не активируются, когда я вхожу в систему вручную на шаге 4?

    Первый шаг
    Я поместил следующее в конец файла .profile в каталоге пользователя, который автоматически вошел в систему на шаге 1 выше (/home/ubuntu/.profile):

    pgrep processname || /home/ubuntu/processscript.sh
    

    Когда пользователь автоматически войдет в систему, эта команда выполнится автоматически, поскольку она находится в .profile. Первая часть команды (до "||" проверяет, запущен ли уже 'processname'. Если нет, она выполнит вторую часть команды (после "||"), т. е. "processscript.sh" ... Если 'processname' уже запущен, то он не будет запущен.

    Эта проверка была необходима, поскольку процесс, который я хотел запустить, не мог иметь несколько запущенных экземпляров одновременно. Кроме того, она решает проблему запуска процесса во второй раз, когда я позже войду в систему вручную.

    Шаг второй
    Создайте файл сценария оболочки с именем «processscript.sh» со следующим содержимым:

    #!/bin/bash
    screen -d -m -S screenname &&
    screen -S screenname -p 0 -X stuff "/home/ubuntu/command.sh^M"
    

    Убедитесь, что «processscript.sh» находится в каталоге /home/ubuntu и что его можно выполнить с помощью команды:

    chmod 744 processscript.sh
    

    Приведенный выше скрипт оболочки создает экземпляр экрана с именем «screenname» и, в случае успешного завершения, заполняет командную строку этого экземпляра экрана командой «command.sh» с возвратом каретки (именно это и делает «^M» в конце).

    Шаг третий
    На предыдущем этапе я столкнулся с некоторыми проблемами при заполнении команды атрибутами в командной строке экрана (я думаю, что требовалось экранирование символов). Чтобы решить эту проблему просто, я добавил полную команду с атрибутами в скрипт оболочки и использовал его вместо этого. Поэтому создайте еще один скрипт оболочки (как выше) с именем "command.sh" и добавьте туда полную команду.

Связанный контент