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

Ubuntu 14.04.5 LTS

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

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

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

  1. Пользователь "человечность" зарегистрирован автоматически к терминалу (TTY) на начальной загрузке:

    "sudo nano /etc/init/tty1.conf"
    
    Change: exec /sbin/getty -8 38400 tty1
    
    To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
    
  2. Пользователь "человечность" выполняет экран GNU:

    screen -d -m -S screenname
    
  3. Пользователь "человечность" выполняет продолжающийся процесс в экране GNU:

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

Ручные шаги в более позднее время:

  1. Я вхожу в систему удаленно как пользователь "человечность" в другом терминале (TTY).
  2. Я повторно прикрепляю к сессии экрана GNU, запущенной на шаге 2:

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

Вопросы:

  • Действительно ли это - самый эффективный способ достигнуть желаемого результата?
  • Как может команды на шаге 2 и 3 быть автоматизированным?
  • Как может команды на шаге 2 и 3 не активироваться, когда я вхожу в систему вручную на шаге 4?
2
задан 6 January 2017 в 16:31

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" и добавьте полную команду там.

1
ответ дан 2 December 2019 в 04:51

Другие вопросы по тегам:

Похожие вопросы: