我以从linuxaria.com复制的代码为例,在我的情况下工作得很好,问题是当我退出终端inotifywait停止时。即使在离开终点站后我也要跑到后面去。我怎么能这么做?
#!/bin/sh
# CONFIGURATION
DIR="/tmp"
EVENTS="create"
FIFO="/tmp/inotify2.fifo"
on_event() {
local date=$1
local time=$2
local file=$3
sleep 5
echo "$date $time Fichier créé: $file"
}
# MAIN
if [ ! -e "$FIFO" ]
then
mkfifo "$FIFO"
fi
inotifywait -m -e "$EVENTS" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %f' "$DIR" > "$FIFO" &
INOTIFY_PID=$!
while read date time file
do
on_event $date $time $file &
done < "$FIFO"发布于 2013-09-19 17:51:33
您可以使用screen或nohup运行脚本,但我不确定这会有什么帮助,因为脚本似乎不会将其输出记录到任何文件。
nohup bash script.sh </dev/null >/dev/null 2>&1 &或
screen -dm bash script.sh </dev/null >/dev/null 2>&1 &不承认也可适用于:
bash script.sh </dev/null >/dev/null 2>&1 & disown您应该只测试哪个命令在终端退出时不允许命令挂起或挂起。
如果要将输出记录到文件,可以尝试以下版本:
nohup bash script.sh </dev/null >/path/to/logfile 2>&1 &
screen -dm bash script.sh </dev/null >/path/to/logfile 2>&1 &
bash script.sh </dev/null >/path/to/logfile 2>&1 & disown发布于 2016-09-09 10:43:08
我从中得到了一份“服务”。因此,我可以像正常服务一样停止/启动它,也可以在重新启动之后启动它:
这是在Centos发行版上制作的,所以如果它马上对其他人有效的话,我就不会了。
在服务目录中创建一个具有执行权限的文件
/etc/init.d/servicename
#!/bin/bash
# chkconfig: 2345 90 60
case "$1" in
start)
nohup SCRIPT.SH > /dev/null 2>&1 &
echo $!>/var/run/SCRIPT.SH.pid
;;
stop)
pkill -P `cat /var/run/SCRIPT.SH.pid`
rm /var/run/SCRIPT.SH.pid
;;
restart)
$0 stop
$0 start
;;
status)
if [ -e /var/run/SCRIPT.SH.pid ]; then
echo SCRIPT.SH is running, pid=`cat /var/run/SCRIPT.SH.pid`
else
echo SCRIPT.SH is not running
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0大写的每一件事,你都应该改为你的脚本名。
行# chkconfig: 2345 90 60使在重新启动系统时启动服务成为可能。这可能不像发行版那样在ubuntu起作用。
发布于 2021-08-10 09:37:06
我发现最好的方法是创建一个systemd服务。
在/lib/systemd/system/checkfile.service中创建systemd文件
sudo vim /lib/systemd/system/checkfile.service然后粘贴在这里:
[Unit]
Description = Run inotifywait in backgoround
[Service]
User=ubuntu
Group=ubuntu
ExecStart=/bin/bash /path_to/script.sh
RestartSec=10
[Install]
WantedBy=multi-user.target在/path_to/script.sh中,您可以拥有以下内容:
inotifywait -m /path-to-dir -e create -e moved_to |
while read dir action file; do
echo "The file '$file' appeared in directory '$dir' via '$action'" >> /dir/event.txt
done确保您的文件是由用户执行的:
sudo chmod +x /path_to/script.sh在创建两个文件之后,用以下方式重新加载systemd管理器配置:
sudo systemctl daemon-reload现在,您可以对脚本使用start/stop/enable:
sudo systemctl enable checkfile
sudo systemctl start checkfile确保在执行之前替换文件/目录/用户/组值。
https://stackoverflow.com/questions/18901622
复制相似问题