Я создал скрипт запуска, но он может работать только от пользователя, а не от root. Как мне заставить его работать?

Вопрос или проблема

Существует 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. Создание сервиса позволит вам автоматизировать запуск скриптов и контролировать их работу. Чтобы это сделать, выполните следующие шаги:

  1. Создайте основной скрипт
    Вам нужно сохранить ваш существующий скрипт в файл, который будет выполняться от имени appian. Предположим, что мы назовем его start_appian_services.sh и разместим в /opt/appian/start_appian_services.sh. Убедитесь, что скрипт обладает правами на выполнение:

    chmod +x /opt/appian/start_appian_services.sh
  2. Создайте файл описания сервиса
    Создайте новый файл в директории /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 — позволяет перезапускать сервис в случае сбоя.
  3. Включите и запустите сервис
    После создания файла сервиса, необходимо загрузить изменения и включить сервис для автоматического запуска при старте системы:

    sudo systemctl daemon-reload
    sudo systemctl enable appian.service
    sudo systemctl start appian.service
  4. Проверка работы сервиса
    Чтобы убедиться, что ваш сервис работает корректно, можно использовать команды:

    sudo systemctl status appian.service
    journalctl -u appian.service

    Эти команды позволят вам увидеть состояние сервиса и журналы выполнения (включая любые ошибки).

Дополнительные рекомендации

  • Отслеживание ошибок: Наличие лог-файла — хорошая практика. Вы можете модифицировать ваш скрипт, чтобы записывать логи выполнения в файл, как это было сделано изначально. Но можно также использовать встроенные возможности systemd для логирования.

  • Безопасность: Убедитесь, что переданные параметры (например, пароль) защищены и не записываются в логи, если это возможно. Рассмотрите возможность использования переменных окружения или конфигурационных файлов с ограниченными правами доступа.

  • Тестирование: После всех настроек протестируйте автоматический запуск, перезагрузив систему и проверив, что все службы успешно стартуют.

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

Оцените материал
Добавить комментарий

Капча загружается...