Я использую следующие системы:
Ubuntu 18.04.2 LTS
bash 4.4.19 (1) -release
supervisord 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
, например
while true; do echo "test" >> /tmp/test.log; sleep 5; done
Скорее всего, вам нужно настроить супервизор на использование определенной рабочей директории для этого задания.
Смотрите директорию
(и, возможно, также окружение
), настраиваемую в документации администратора для раздела программы