0

我创建了一个后台 shell 来监视一个文件夹(使用 inotifywait)并在创建新文件时执行一个进程(一个 php 脚本将信息发送到其他几个服务器并更新数据库,但我认为这不相关)在里面。

我的问题是,在脚本实际上终止了一段时间后,我不明白为什么(我将输出重定向到一个文件而不是填充缓冲区,即使是 php 执行)。

我正在使用 Ubuntu 12.04 服务器和最新版本的 php。

这是我的脚本:

#!/bin/sh

#get the script directory
SCRIPT=$(readlink -f "$0")
script_path=$(dirname "$SCRIPT")

for f in `ls "$script_path"/data/`
do
    php myscript.php "$script_path"/data/$f &
done
#watch the directory for file creation
inotifywait -q -m --format %w%f -e create "$script_path"/data/ | while read -r line; do
    php myscript.php "$line" & 
done
4

2 回答 2

0

你应该看看,nohupscreen正是你要找的

于 2013-06-26T09:11:52.053 回答
0

好的,经过数小时和数小时我终于找到了一个解决方案,它可能(必须)有点脏,但它有效!正如我在前面的命令中所说,我使用了陷阱命令,这是我的最终脚本:

#!/bin/sh

#get the script directory
SCRIPT=$(readlink -f "$0")
script_path=$(dirname "$SCRIPT")

#trap SIGHUP SIGINT SIGTERM and relaunch the script
trap "pkill -9 inotifywait;($SCRIPT &);exit" 1 2 15

for f in `ls "$script_path"/data/`
do
    php myscript.php "$script_path"/data/$f &
done
#watch the directory for file creation
inotifywait -q -m --format %w%f -e create "$script_path"/data/ | while read -r line; do
    php myscript.php "$line" & 
done

希望它能帮助像我一样的shell初学者:)

编辑:添加“pkill -9 inotifywait”以确保inotify进程不会堆积,括号以确保新进程不是当前进程的子进程,并退出以确保当前进程停止运行

于 2013-06-26T08:58:03.793 回答