мои сценарии bash не работают при вызове через супервизор

Я использую следующие системы:

  • 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, и это, похоже, не помогло. (Или больно!)

1
задан 12 January 2020 в 04:06
2 ответа

Похоже, вы пытаетесь поддерживать синхронизацию между файлами в разных каталогах. В ваших скриптах есть необходимые бесконечные циклы?

Я бы предложил вам отладить с помощью базового скрипта, чтобы определить, есть ли проблема в ваших скриптах с supervisord, например

while true; do echo "test" >> /tmp/test.log; sleep 5; done
0
ответ дан 13 January 2020 в 07:04

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

Смотрите директорию (и, возможно, также окружение ), настраиваемую в документации администратора для раздела программы

0
ответ дан 13 January 2020 в 07:04

Теги

Похожие вопросы