Некоторые приложения, работающие на наших серверах, особенно важны с точки зрения их непрерывного и стабильного функционирования на протяжении длительного периода времени. Для того, чтобы избежать простоя таких программ после перезагрузки сервера, полезно использовать автоматический запуск необходимых приложений. В данном мануале расскажем о том, как настроить автозапуск приложений на сервере, и как сделать так, чтобы некоторые кривые программы (приложения) не закрывались после завершении сессии RDP/SSH.
Автозапуск приложений на Windows Server
Во-первых, на Windows-сервере необходимо настроить автоматический вход пользователя в систему при запуске сервера. Для чего нажмите Win R
, и в открывшейся строке наберите control userpasswords2
. После чего намите OK
.
Здесь активируйте опцию Users must enter a user name and password to use this computer
или Требовать ввод имени пользователя и пароля
.
Далее введите имя пользователя и дважды пароль учётной записи, под именем которой будет осуществляться вход в систему. После чего нажмите OK
.
На следующем шаге нужно будет добавить необходимое приложение для автоматического запуска. Для чего перейдите в проводнике по адресу:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
И далее, в этот каталог добавьте программу, которую вы хотите запускать. В нашем примере мы добавили туда Paint
, точнее ярлык этого приложения.
Теперь после перезагрузки или при включении сервера это приложение будет запускаться автоматически.
По умолчанию, когда вы закрываете окно сессии RDP нажатием на крестик без выхода из системы, все запущенные приложения продолжают работать. Если явно не задано ограничение времени сессии RDP, то эти приложения будут продолжать функционировать пока вы их не закроете, не произведёте выход из системы или не перезагрузите сервер. Лимиты времени активности сессии можно настроить в свойствах учётной записи. Для перехода к данным настройкам наберите lusrmgr.msc
для локального пользователя, либо перейдите в Active Directory - пользователи и компьютеры
для доменной учётной записи.
Таймауты сессий также можно настроить при помощи групповых политик. Для чего необходимо запустить gpedit.msc
, и далее, User Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Session Time Limits
.
Про некоторые приложения (опционально)
Однако иногда, некоторые приложения (далеко не все) могут прекращать свою работу при завершении сеанса RDP. В качестве решения подобной проблемы можно использовать следующий способ.
Во-первых, в Параметрах
найдите вкладку Power & sleep
и установите опцию When plugged in, turn off after
в значение Never
.
Далее, перед завершением сессии RDP запустите командную строку (cmd
).
В командной строке наберите:
query session
Эта команда выдаст вам список всех сессий, которые выполняются на сервере в данный момент. В этом списке найдите свою сессию. Далее, нам понадобится утилита для подключения к нашей сессии tscon
. При наборе следующей команды используйте идентификатор своей сессии. Он указан в поле ID
.
tscon X /dest:console
В нашем случае X
– это 2
.
После выполнения команды приложения данной сессии будут продолжать свою работу в фоновом режиме.
Следует сказать, что применение данного метода небезопасно. Используйте его только в случае самой крайней необходимости.
Автозапуск приложений на Linux
В операционных системах Linux для управления автоматическим запуском приложений чаще всего используется система инициализации systemd
. В данном случае для управления приложениями, или службами, применяется команда systemctl
.
Формат команды выглядит следующим образом:
- добавление службы в автозагрузку:
$ sudo systemctl enable service-name
- удаление службы из автозагрузки:
$ sudo systemctl disable service-name
- проверка наличия службы в автозагрузке:
$ sudo systemctl is-enabled service-name
где, service-name
– имя службы.
Команду systemctl
также следует использовать для добавления в автозагрузку скриптов. Чтобы это сделать, необходимо создать unit-файл. После чего, созданный файл нужно добавить в автозагрузку также, как и службу.
Для создание unit-файла наберите команды:
$ cd /lib/systemd/system
$ sudo vi your-script.service
Unit-файл выглядит примерно так:
[Unit]
Description=Your Script Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/local/your-script.sh
[Install]
WantedBy=multi-user.target
Здесь:
Description
– описание скрипта;After=multi-user.target
– запуск скрипта во многопользовательском режиме;Type=idle
– означает, что служба будет запускаться после отправки всех заданий;ExecStart=/usr/bin/local/your-script.sh
– полный путь к скрипту.
Теперь нужно дать созданному файлу необходимые права:
$ sudo 644 your-script.service
Обновить конфигурацию:
$ sudo systemctl daemon-reload
Добавить наш скрипт в автозагрузку:
$ sudo systemctl enable your-script.service
Далее, этот скрипт будет запускаться при загрузке сервера автоматически.
Ещё раз про некоторые приложения (опционально)
Некоторые скрипты, приложения и команды прекращают работу при завершении сессии SSH. Для того, чтобы обойти проблему, существуют несколько способов. Мы же рассмотрим здесь парочку из них.
В первом случае перевести процесс в фоновый режим можно при помощи команды nohup
. Данная команда блокирует сигнал SIGHUP
, который отправляется процессам при завершении сессии SSH.
Например, чтобы отправить выполнение нашего скрипта в фон, нужно набрать:
$ sudo nohup /lib/systemd/system/your-script.service &
Символ &
означает, что процесс будет работать в фоновом режиме.
Ещё один способ избежать завершения процесса при закрытии сессии SSH – это команда setsid
.
Команда setsid
создаёт новую сессию, если вызывающий процесс не является ведущим в группе процессов. Вызывающий процесс становится ведущим и единственным в новой сессии и в новой группе процессов. Изначально новая сессия не имеет терминала, контролирующего её. При этом ID
сессии и ID
группы процессов – тот же, что ID
процесса.
Применительно к нашему скрипту команда setsid
может использоваться со следующими опциями:
$ sudo setsid /lib/systemd/system/your-script.service
- команда запускает скрипт в новой сессии;
$ sudo setsid -c /lib/systemd/system/your-script.service
- опция устанавливает управляющий терминал в текущий;
$ sudo setsid -w /lib/systemd/system/your-script.service
- опция устанавливает ожидание завершения работы скрипта и возвращает выходное значение скрипта в качестве возвращаемого значения команды
setsid
;
$ sudo setsid -V
- опция возвращает версию команды
setsid
;
$ sudo setsid -h
- опция показывает небольшой
help
для командыsetsid
.