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
)。
我有一个主管 '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
)。