Вопрос или проблема
Существует 4 сценария, которые должны запускаться после перезагрузки от имени пользователя “appian”:
/opt/appian/appian_home/services/bin/start.sh -p Пароль -s все
/opt/appian/appian_home/data-server/bin/start.sh
/opt/appian/appian_home/search-server/bin/start.sh
/opt/appian/appian_home/tomcat/apache-tomcat/bin/start-appserver.sh
Вот некоторый код
#!/bin/bash
# Файл журнала для отладки
LOG_FILE="/var/log/appian_services_start.log"
# Запуск служб и ведение журнала процесса
echo "Запуск служб Appian: $(date)" >> $LOG_FILE
# Сценарий 1: Запуск служб с учетными данными
/opt/appian/appian_home/services/bin/start.sh -p Пароль -s все >> $LOG_FILE 2>&1
echo "Служба 1 запущена: services/bin/start.sh" >> $LOG_FILE
# Ждем 30 секунд
sleep 30
# Сценарий 2: Запуск data-server
/opt/appian/appian_home/data-server/bin/start.sh >> $LOG_FILE 2>&1
echo "Служба 2 запущена: data-server/bin/start.sh" >> $LOG_FILE
# Ждем 10 секунд
sleep 10
# Сценарий 3: Запуск search-server
/opt/appian/appian_home/search-server/bin/start.sh >> $LOG_FILE 2>&1
echo "Служба 3 запущена: search-server/bin/start.sh" >> $LOG_FILE
# Ждем 10 секунд
sleep 10
# Сценарий 4: Запуск Tomcat-сервера
/opt/appian/appian_home/tomcat/apache-tomcat/bin/start-appserver.sh >> $LOG_FILE 2>&1
echo "Служба 4 запущена: tomcat/apache-tomcat/bin/start-appserver.sh" >> $LOG_FILE
echo "Все службы успешно запущены: $(date)" >> $LOG_FILE
# Это ручные шаги, что работает
dzdo su - appian /opt/appian/appian_home/services/bin/start.sh -p Пароль -s все
dzdo su - appian /opt/appian/appian_home/data-server/bin/start.sh
dzdo su - appian /opt/appian/appian_home/search-server/bin/start.sh
dzdo su - appian /opt/appian/appian_home/tomcat/apache-tomcat/bin/start-appserver.sh`
Как организовать сценарий запуска так, чтобы после перезагрузки сценарии могли выполняться пользователем appian
?
Вам следует создать службу для запуска основного сценария, который запускает остальные:
[Unit]
Description=Запуск моих сценариев
After=syslog.target network.target
StartLimitIntervalSec=0
[Service]
Type=simple
#Restart=on-failure
#RestartSec=180
User=appian
ExecStart=/path/to/mymainscript.sh
PIDFile=/run/myscripstsappian.pid
[Install]
WantedBy=multi-user.target
~
#
Конечно, это не единственный способ, и есть возможности для улучшений.
Но это начало.
Ответ или решение
Для решения проблемы автоматического запуска ваших скриптов после перезагрузки системы от имени пользователя appian
, важно использовать надежный метод обеспечения работы этих скриптов в фоновом режиме. Наиболее подходящий способ для современных дистрибутивов Linux — это создание systemd-сервиса.
Создание systemd-сервиса
Systemd — это система инициализации, которая управляет процессами в Linux. Создание сервиса позволит вам автоматизировать запуск скриптов и контролировать их работу. Чтобы это сделать, выполните следующие шаги:
-
Создайте основной скрипт
Вам нужно сохранить ваш существующий скрипт в файл, который будет выполняться от имениappian
. Предположим, что мы назовем егоstart_appian_services.sh
и разместим в/opt/appian/start_appian_services.sh
. Убедитесь, что скрипт обладает правами на выполнение:chmod +x /opt/appian/start_appian_services.sh
-
Создайте файл описания сервиса
Создайте новый файл в директории/etc/systemd/system/
, назовите его, например,appian.service
:sudo nano /etc/systemd/system/appian.service
Вставьте в него следующий код:
[Unit] Description=Запуск служб Appian After=network.target [Service] Type=simple User=appian ExecStart=/opt/appian/start_appian_services.sh Restart=on-failure [Install] WantedBy=multi-user.target
Пояснения к параметрам:
User=appian
— скрипт будет исполняться от имени пользователяappian
.ExecStart
— указывает путь к вашему основному скрипту.Restart=on-failure
— позволяет перезапускать сервис в случае сбоя.
-
Включите и запустите сервис
После создания файла сервиса, необходимо загрузить изменения и включить сервис для автоматического запуска при старте системы:sudo systemctl daemon-reload sudo systemctl enable appian.service sudo systemctl start appian.service
-
Проверка работы сервиса
Чтобы убедиться, что ваш сервис работает корректно, можно использовать команды:sudo systemctl status appian.service journalctl -u appian.service
Эти команды позволят вам увидеть состояние сервиса и журналы выполнения (включая любые ошибки).
Дополнительные рекомендации
-
Отслеживание ошибок: Наличие лог-файла — хорошая практика. Вы можете модифицировать ваш скрипт, чтобы записывать логи выполнения в файл, как это было сделано изначально. Но можно также использовать встроенные возможности systemd для логирования.
-
Безопасность: Убедитесь, что переданные параметры (например, пароль) защищены и не записываются в логи, если это возможно. Рассмотрите возможность использования переменных окружения или конфигурационных файлов с ограниченными правами доступа.
-
Тестирование: После всех настроек протестируйте автоматический запуск, перезагрузив систему и проверив, что все службы успешно стартуют.
Создавая systemd-сервис, вы обеспечите надежный и автоматизированный процесс запуска необходимых скриптов при загрузке системы, что повысит стабильность вашей инфраструктуры.