supervisor 或 cat 或 bash 没有看到更改的文件

supervisor or cat or bash doesn't see changed file

我有一个主管 'program' (queue.sh) 运行 是一个从文本文件读取的 bash 脚本和 运行 另一个程序,如果文本文件不为空:

while true; do

        # Read line 1
        line=$(head -n1 ./.queue)
        echo $line

        if [ "$line" != "" ]; then
                # Remove line 1
                sed -i '1d' ./.queue

                # Call the download script
                /usr/bin/env php download.php $line
        else
                echo "Queue empty"
        fi

        sleep 2

done

download.php花了几分钟,然后下一行是运行。如果 .queue 包含 20 行,则 queue.sh 将忙很长时间。当它不忙时,它会 .queue 每 2 秒检查一次内容。

我的队列文件目前有 3 行。当我手动 运行 queue.sh 时,我可以看到它在工作:它找到第 1 行,将其砍掉,然后 运行s download.php。监工不会!即使在重新启动作业和整个守护程序之后,它也会每 2 秒说 Queue empty 一次。更改消息并重新启动作业后,它现在每 2 秒一直显示 Queue empty II。但是 .queue 不是空的,所以它应该 运行 行。

supervisor 上下文中是否有某种超级持久文件缓存?我已经重新启动了作业和守护进程。我有 运行 free && sync && echo 3 > /proc/sys/vm/drop_caches && free(不在主管上下文中!)。我 touch .queue。什么都不管用。为什么主管的queue.sh坚持.queue是空的?

问题出在目录上。默认情况下,Supervisor 在 / 中运行,而不是程序可执行文件所在的位置。 Supervisor 有一个 directory config 修复了它。新配置文件:

[program:xx]
command=/bin/bash queue.sh
directory=/my/path/xx

而且我不得不重新启动服务 (service supervisor restart),而不仅仅是程序 (supervisorctl restart xx)。