Назад | Перейти на главную страницу

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

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

Я написал два сценария, которые довольно хорошо работают из интерфейса командной строки, но когда я пытаюсь использовать с ними 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