主管或猫或bash没有看到更改的文件

时间:2016-11-17 21:54:51

标签: bash caching supervisord

我有一个主管'程序' (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将会很长时间。当它不忙时,它会每隔2秒检查.queue内容。

我的队列文件目前有3行。当我手动运行queue.sh时,我可以看到它正常工作:它找到第1行,将其删除,然后运行download.php。主管没有!即使在重新启动作业和整个守护程序之后,它也会每2秒继续说Queue empty。更改消息并重新启动作业后,它现在每隔2秒继续说Queue empty II。但是.queue不是空的,所以应该运行这些行。

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

1 个答案:

答案 0 :(得分:0)

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

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

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