在后台运行 inotifywait

在后台运行 inotifywait

我尝试了所有方法让这个脚本在后台运行(作为启动脚本、守护进程等)。

问题是这个脚本在终端中可以运行,但在后台却不行:

#!/bin/sh
while /usr/local/bin/inotifywait --format '%T %w %e %f' --timefmt '%H:%M:%S %e/%m/%y' --recursive --quiet --outfile /root/watchscript_logs/log /volume1/homes/admin
do
/opt/bin/bash /root/ftpscript.sh
done

我已经在 Synology NAS(DSM 4.2,Linux 2.6.32.12)上尝试过此操作

答案1

我尝试了所有方法让这个脚本在后台运行(作为启动脚本、守护进程等)

....但你没有告诉我们任何您使用的代码。

'ftpscript' 未执行,并且未将任何内容写入指定的日志文件

您是否检查过您启动的进程是否仍在运行?什么日志文件?您显示的代码不会写入任何日志文件。

如果您(也)提供了与此相关的 Linux 的一些详细信息,那将会很有帮助。

这是一个 sys V init 脚本,它应该可以解决问题(如果您知道如何部署它)....

#!/bin/sh

if [ -f /etc/init.d/functions ] ; then
   . /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
   . /etc/rc.d/init.d/functions  
else
   exit 0
fi

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

RETVAL=0

start() {
   gprintf "Starting inotify monitor: "
   RETVAL=1
   daemon YOURSCRIPT.sh
   RETVAL=$?
   return RETVAL
}

stop() {
   gprintf "Stopping inotify monitor: "
   killproc YOURSCRIPT.sh
   RETVAL=$?
   return RETVAL;
}

restart() {
   stop
   start
}

case "$1" in
   start)
      start
      ;;
   stop)
      stop
      ;;
   restart)
      restart
      ;;
   *)
       gprintf "Usage: %s {start|stop|restart}\n" "$0"
       exit 1
esac

exit $?

答案2

最好的方式是使用 systemd 服务。

查看我在这个 stackoverflow 帖子中的回答:

https://stackoverflow.com/a/68724395/10914512

相关内容