我正在使用以下系统:
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
)可配置的项目部分的主管文档