Я использую следующие системы:
Ubuntu 18.04.2 LTS
bash 4.4.19 (1) -выпуск
руководитель 3.3.1-1.1
Я написал два сценария, которые довольно хорошо работают из интерфейса командной строки, но когда я пытаюсь использовать с ними supervisord, они не работают.
Когда я выполняю их вручную, я захожу в папку каталога, в которой они оба находятся, и выдаю команды. Как правило, у меня есть два разных сеанса ssh, и я запускаю одну команду в одном окне ssh, а другую команду в другом окне ssh.
root@LPRcloud:~/lpr-scripts# ./lpr-loader.sh
и
root@LPRcloud:~/lpr-scripts# ./file-minder.sh -s /home/ -d /home/rslsync/lpr-sync/ -e /home/rslsync -T
У меня есть супервизор, настроенный в /etc/supervisor/supervisord.conf с этой директивой внизу:
files = /etc/supervisor/conf.d/*.conf
Я поместил в каталог следующий файл:
/etc/supervisor/conf.d/lpr-loader.conf
Вот соответствующие строки из этого файла:
[program:lpr-loader]
command=bash -c "/root/lpr-scripts/lpr-loader.sh" ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1 ; number of processes copies to start (def 1)
[program:file-minder]
command=bash -c "/root/lpr-scripts/file-minder.sh -s /home/ -d /home/rslsync/lpr-sync/ -e /home/rslsync" ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1 ; number of processes copies to start (def 1)
После внесения любых изменений в файл lpr-loader.conf я запускаю эти команды в следующем порядке:
root@LPRcloud:~/lpr-scripts# supervisorctl reread
file-minder: available
root@LPRcloud:~/lpr-scripts# supervisorctl status all
lpr-loader RUNNING pid 6173, uptime 5:49:11
root@LPRcloud:~/lpr-scripts# service supervisor stop
root@LPRcloud:~/lpr-scripts# service supervisor start
root@LPRcloud:~/lpr-scripts# supervisorctl status all
file-minder RUNNING pid 91580, uptime 0:00:02
lpr-loader RUNNING pid 91581, uptime 0:00:02
root@LPRcloud:~/lpr-scripts# supervisorctl status all
file-minder RUNNING pid 91580, uptime 0:00:06
lpr-loader RUNNING pid 91581, uptime 0:00:06
Итак, я знаю, что предположительно работают как lpr-loader, так и file-minder. Я даже тяну одну из этих:
root@LPRcloud:~/lpr-scripts# ps aux | egrep 'lpr|minder'
root 15492 0.0 0.0 16948 1008 pts/0 S+ 23:40 0:00 grep -E --color=auto lpr|minder
root 91580 0.0 0.0 23860 3648 ? S 23:38 0:00 /bin/bash /root/lpr-scripts/file-minder.sh -s /home/ -d /home/rslsync/lpr-sync/ -e /home/rslsync
root 91581 14.0 0.0 23988 3704 ? S 23:38 0:20 /bin/bash /root/lpr-scripts/lpr-loader.sh
Но пока скрипты не работают в фоновом режиме. И если я вручную запускаю эти скрипты, они работают правильно.
Что я здесь делаю не так?
Есть ли директива PATH, которую я мог бы / должен использовать в lpr-loader.conf, которая сообщала бы супервизору, какой рабочий каталог нужен?
После реализации предложений из приведенных ниже комментариев я добился правильной работы file-minder, но lpr-loader не работает. Статус supervisorctl говорит, что он РАБОТАЕТ, но никаких изменений в файлах или базе данных не происходит. Есть ли какие-либо записи, которые выполняет супервизор, которые я мог бы использовать, чтобы рассказать мне, что происходит?
Кстати, я исследовал директиву окружения в супервизоре. Я добавил его в раздел [program: lpr-loader] моего conf.d, и это, похоже, не помогло. (Или больно!)
Вероятно, вам потребуется настроить supervisord для использования определенного рабочего каталога для этого задания.
Увидеть directory
(и, возможно, также environment
) настраивается в Документация супервайзера по разделу программы
Похоже, вы пытаетесь поддерживать синхронизацию между файлами в разных каталогах. Есть ли в ваших скриптах необходимые бесконечные циклы?
Я бы посоветовал вам выполнить отладку с помощью базового сценария, чтобы определить, связана ли проблема с вашими сценариями с supervisord
например
while true; do echo "test" >> /tmp/test.log; sleep 5; done