Автозапуск приложений на сервере

Наверняка на ваших виртуалках крутится некоторое количество программ, стабильное функционирование которых имеет особую важность. Тому, чтобы такой софт работал без перерывов на протяжении длительного времени, может помочь автоматический запуск критически важных приложений. Ниже покажем, как настроить автоматический запуск определённых программ на виртуальных серверах, а также, что можно предпринять, если какие-нибудь некорректно работающие приложения закрываются после завершения сессии удалённого управления сервером.

Автозапуск приложений на серверах Windows

Для начала, на виртуальном сервере, работающем под управлением ОС Windows, необходимо настроить автоматический вход в систему. Для этого нажмите Win R, в открывшейся строке введите control userpasswords2 и нажмите OK.

control userpasswords2 - Автозапуск приложений на сервере

Далее, необходимо поставить галочку в строке Требовать ввод имени пользователя и пароля (Users must enter a user name and password to use this computer).

Требовать ввод имени пользователя и пароля - Автозапуск приложений на сервере

Затем необходимо набрать имя учётной записи, под которой будет осуществляться вход в систему, а также дважды пароль этого пользователя. Закончив ввод учётных данных нажмите OK.

Учётные данные пользователя

На следующем этапе добавьте приложение, которое вы планируете запускать автоматически при входе в систему. Чтобы это сделать, в проводнике перейдите по следующему адресу:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

После чего в данную директорию скопируйте ярлык необходимого приложения. В нашем случае мы положили в этот каталог ярлык Paint.

Ярлык приложения

После того, как вы произведёте данные действия, добавленное в автозагрузку приложение должно будет запускаться автоматически.

Запуск приложения

В общем случае, при закрытии окна сессии удалённого рабочего стола без выхода из системы, все работающие приложения будут продолжать функционировать. Если вы не планируете задавать явным образом ограничение времени сессии RDP, то данные программы будут продолжать работать, пока вы их не закроете, не выйдите из системы или не перезапустите свою виртуалку. Настройки временных лимитов находятся в свойствах пользователя. Для того, чтобы перейти к ним, наберите в командной строке lusrmgr.msc в случае с локальной учёткой, либо перейдите в Active Directory - пользователи и компьютеры в случае с пользователем домена.

Настройка лимитов времени

Те же настройки можно произвести с помощью групповых политик. В этом случае запустите gpedit.msc и перейдите в User Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Session Time Limits.

Настройка лимитов времени через групповую политику

О некоторых приложениях

В некоторых случаях может происходить так, что запущенные приложения завершают свою работу при отключении сеанса удалённого рабочего стола. Такая проблема имеет своё решение. Заключается оно в следующем: в Параметрах необходимо найти вкладку Power & sleep и там установить опцию When plugged in, turn off after в значение Never.

When plugged in, turn off after

После этого необходимо перед завершением сессии RDP запустить командную строку (cmd).

Запуск командной строки

В командной строке нужно набрать:

query session

Результатом выполнения данной команды станет список всех сессий, выполняющихся в данный момент на вашем сервере. В списке необходимо отыскать свою сессию, и подключиться к ней с помощью утилиты tscon. Пример использования данной утилиты выглядит следующим образом:

tscon X /dest:console

Здесь X — это идентификатор интересующей нас сессии. Этот самый идентификатор указывается в выводе команды query session в поле ID.

Идентификатор сессии - Автозапуск приложений на сервере

В результате, программы указанной сессии продолжат работать в фоновом режиме.

Но использование такого метода не является безопасным. Применять его следует исключительно в случаях крайней необходимости.

Автозапуск приложений на серверах Linux

На серверах, работающих под управлением операционных систем семейства Linux, для управления автозапуском используется система инициализации systemd. Интерфейсом при работе с systemd является команда systemctl. Вот некоторые примеры применения данной команды:

$ sudo systemctl enable my-service

В данном случае команда systemctl добавляет службу my-service в автозагрузку.

$ sudo systemctl disable my-service

Здесь команда systemctl удаляет службу my-service из автозагрузки.

$ sudo systemctl is-enabled my-service

А здесь команда systemctl проверяет наличие службы my-service в автозагрузке.

Команда systemctl также может использоваться для добавления в автозагрузку исполнительных сценариев (скриптов). Делается это созданием unit-файла, который в свою очередь необходимо так же добавить в автозагрузку.

Пример команды создания unit-файла выглядит следующим образом:

$ cd /lib/systemd/system
$ sudo vi my-script.service

В данном примере my-script.service — имя создаваемого unit-файла. Его содержимое выглядит примерно так:

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/local/my-script.sh

[Install]
WantedBy=multi-user.target

В данном случае:

  • Description – описание скрипта;
  • After=multi-user.target означает, что запуск скрипта производится во многопользовательском режиме;
  • Type=idle говорит о том, что служба будет запущена после отправки всех заданий;
  • ExecStart=/usr/bin/local/my-script.sh – место расположения скрипта.

Для того, чтобы скрипт смог запуститься на исполнение, ему нужно добавить необходимые права:

$ sudo 644 my-script.service

Далее, следует перезапустить систему инициализации:

$ sudo systemctl daemon-reload

И наконец, нужно добавить наш скрипт в автозагрузку:

$ sudo systemctl enable my-script.service

Теперь my-script.service будет автоматически запускаться при загрузке операционной системы.

И ещё о некоторых приложениях

Так же, как и на Windows-серверах, на серверах, работающих на Linux, существует проблема некоторых приложений, которые прекращают свою работу при завершении сеанса удалённой работы на сервере. В данном случае речь идёт, конечно же, о подключении по SSH. И, естественно, такая проблема имеет решение.

Во-первых, можно перевести процесс в фоновый режим при помощи команды nohup. Команда nohup умеет блокировать сигнал SIGHUP, который получают процессы при завершении сессии SSH. Пример написания данной команды выглядит так:

$ sudo nohup /lib/systemd/system/my-script.service &

Обратите внимание на символ &. Как раз он-то и означает, что процесс будет работать в фоновом режиме.

Ещё одним методом решения проблемы является команда setsid. Она может создать новую сессию в случае, когда вызывающий процесс — не ведущий в группе процессов. Вызывающий процесс становится ведущим и единственным в новой сессии и в новой группе процессов. Как правило, новая сессия не имеет терминала, который её контролирует. Но при всём при том, ID сессии и ID группы процессов – это то же, что и ID процесса.

Если вернутся к нашему скрипту, то команду setsid можно использовать со следующими опциями:

$ sudo setsid /lib/systemd/system/my-script.service

Здесь скрипт запускается в новой сессии.

$ sudo setsid -c /lib/systemd/system/my-script.service

В данном случае с помощью setsid управляющий терминал устанавливается в текущий.

$ sudo setsid -w /lib/systemd/system/my-script.service

А здесь устанавливается ожидание завершения работы скрипта и возвращается его выходное значение в качестве возвращаемого значения команды setsid.

$ sudo setsid -V

Такая команда возвращает версию команды setsid.

$ sudo setsid -h

А таким образом можно вызвать небольшой help для команды setsid.

sudo setsid -h - Автозапуск приложений на сервере

Вам также может понравиться