我的 bash 脚本通过 Supervisord 调用时无法运行

我的 bash 脚本通过 Supervisord 调用时无法运行

我正在使用以下系统:

  • Ubuntu 18.04.2 LTS

  • bash 4.4.19(1)-发布

  • 主管 3.3.1-1.1

我已经编写了两个脚本,它们在 CLI 中运行得很好,但是当我尝试使用 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 status all 表示它正在运行,但文件或数据库没有发生任何变化。supervisor 是否正在执行任何日志记录,我可以使用它们来了解发生了什么?

顺便说一句,我调查了主管中的环境指令。我将其添加到 conf.d 的 [program:lpr-loader] 部分,但似乎没有帮助。(或者有害!)

答案1

看起来您正在尝试保持不同目录中的文件之间的同步。您的脚本是否具有必要的无限循环?

我建议你用一个基本的脚本进行调试,以确定问题是否出在你的脚本上,supervisord例如

while true; do echo "test" >> /tmp/test.log; sleep 5; done

答案2

您可能需要配置supervisord以使用特定的工作目录来完成这项工作。

请参阅directory(也可能是environment)可配置的项目部分的主管文档

相关内容