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

问题描述:

我有一个主管“程序”(queue.sh),其运行bash脚本,从文本文件读取,运​​行另一个程序,如果文本文件不为空:主管或猫或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不是空的,所以它应该运行线路。

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

+0

你确定脚本运行在正确的目录吗?尝试将'./。queue'改为绝对路径名。 – Barmar

+0

或者在脚本的前面放一个'cd'命令来切换到包含'.queue'的目录。顺便说一句,不需要'./',这是所有相对路径名的默认值。 – Barmar

+0

现在我感到很蠢。主管有一个“目录”配置可以修复所有的问题。显然重新启动程序是不够的。每次更改程序conf文件后,我都必须重新启动整个supervisor服务。谢谢! – Rudie

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

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

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