- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 bash 脚本与主管一起运行
#!/bin/bash
DIR="/home/files"
while read file; do
IFS=', ' read -r -a array <<< "$file"
echo "Time: ${array[0]}"
echo "File: ${array[1]}"
#... doing something with the file
done < <(inotifywait -m -r -e close_write "$DIR" --timefmt "%d_%b_%Y" --format "%T %w%f")
它运行得很好,但是当我执行 supervisorctl stop all
时,即使程序停止,inotifywait
进程仍在运行。有没有办法在 bash 脚本退出后终止 inotifywait
?
编辑 1该程序的主管配置是
[program:watch]
command=/root/watch_data.sh
user=root
stderr_logfile=/var/log/supervisord/watch_cloud.log
stdout_logfile=/var/log/supervisord/watch_cloud.log
autorestart=true
stopsignal=INT
最佳答案
我认为当您执行 supervisorctl stop all
时,您缺少将终止信号传播到所有子进程的选项。通常一个人有一个父进程和一个子进程,当父进程得到 SIGTERM
/SIGINT
它将/应该有一个协调的方式并且应该是负责发送信号的那个或者其他方式关闭 child 。
supervisord
只是为此提供了一个选项。来自official documentation
stopasgroup
If true, the flag causes supervisor to send the stop signal to the whole process group and implies
killasgroup
is true. This is useful for programs, such as Flask in debug mode, that do not propagate stop signals to their children, leaving them orphaned.
killasgroup
If true, when resorting to send
SIGKILL
to the program to terminate it send it to its whole process group instead, taking care of its children as well, useful e.g with Python programs using multiprocessing.
killasgroup
会在 Supervisor 诉诸发送 SIGKILL
时终止组中的所有进程。这个想法是,当进程运行良好时,应该允许它自己处理停止它的 child 。但是当它行为不端并且需要一个选项来强制整个进程组终止时。
还要记住传播 SIGINT
,尽管默认操作是正常终止,但进程可以忽略。如果您不太担心脚本的优雅终止,您可以传递 SIGKILL
,这相当于 Linux 中 kill -9
生成的信号。
所以你的主管配置文件中的以下选项
[program:watch]
command=/root/watch_data.sh
user=root
stderr_logfile=/var/log/supervisord/watch_cloud.log
stdout_logfile=/var/log/supervisord/watch_cloud.log
stopasgroup=true
killasgroup=true
stopsignal=KILL
关于bash - inotifywait 没有被 supervisorctl stop 杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47734494/
我在同一目录中有一个名为 watch.sh 的基本 inotifywait 脚本和一些以 .styl 结尾的文件。这是脚本,它捕获更改,但不执行 do/done 中的代码 我像 sh watch.sh
我特别尝试同时观看 2 个子目录中的 2 种不同的文件类型: “js”子目录中的 .coffee 文件类型 “css”子目录中的 .styl 文件类型 我只知道这么多 bash,我正试图让这样的东西发
我从 linuxaria.com 复制了这段代码作为示例,并且在我的情况下工作得很好问题是当我从终端 inotifywait 停止退出时。即使退出终端后,我也想在后台运行。我该怎么做? #!/bin/
我正在尝试使用 inotifywait 来监视我的 ~/js 目录下的所有 .js 文件;如何在以下命令中格式化我的正则表达式? $ inotifywait -m -r --exclude [REGE
您好,我遇到这样一种情况,inotifywait 监视目录中的文件,如下所示:inotifywait -m -r -e delete -e created mydir。我知道一个进程要在 mydir
我有一个脚本可以将文件从目录上传到 s3 存储桶。 我的脚本是这样的 aws s3 sync s3:/// 当我运行这个脚本时,整个文件都被正确上传了。我想在上传新文件时运行这个脚本,所以我决定使用
我正在运行一个 inotify 等待脚本,每当文件被修改、创建或删除时,该脚本都会触发 bash 脚本调用一个函数来同步我的文件数据库。 #!/bin/sh while inotifywait -r
我想编写一个脚本,当文件在特定目录(或子目录)中发生更改(意味着内容更改或文件被同名文件覆盖)时触发一些代码。当运行我的代码并更改文件时,它似乎每次都运行两次,因为我得到了两次回显输出。有什么我想念的
我正在尝试使用 inotifywait 来检测每次文件或文件夹实时移动到文件夹中(例如,在本例中为/root) 我试过这个,它确实检测到文件夹和文件,但这是针对创建的文件,我希望它用于移动的文件/文件
我有一个 shell 脚本,我在其中使用“inotifywait”来监视三个目录。一旦文件进入目录“dirToProcess”,一些处理就完成了,然后文件被移动到“successDir”或“faile
我有一个包含 Sphinx 文档的文件夹,我用 inotifywait 观看(来自 inotify-tools)。该脚本重新构建 html 和 singlehtml 并刷新 Chrome。 #!/bi
我正在尝试设置监视脚本和 pdf 合并脚本的串联,以检查扫描仪将 pdf 写入的文件夹。第一个脚本的想法是监视文件夹,直到出现两个 pdf,然后调用第二个脚本。 现在的问题是,inotifywait
我想使用 inotifyway 来监控文件夹中新创建或移动的文件但仅限于文件。 假设我的文件夹名为“watched_folder_test”,文件名为“toto.txt”。如果我使用 mv 命令将文件
我有一个小脚本 watches files for changes using inotifywait .当某些事情发生变化时,一批文件将通过大约需要 10 秒才能运行的过程(编译、压缩、重组等)发送
我正在使用: inotifywait -m -q -e close_write --format %f . | while IFS= read -r file; do cp -p "$file" /p
当前 inotifywait 正在监视 git 服务器文件夹。结束它仅在特定文件被修改时发出。问题是,当更改被推送到 git 服务器时,inotifywait 触发了几次。我不知道为什么。 那么接下来
我不确定这是否可能,但我经常这么想,而且一些解决方案让我感到惊讶。是否可以在不创建两个进程的情况下创建以下脚本的等效项(在这种情况下,很明显创建了两个进程,因为有一个管道): #!/bin/bash
我在守护进程模式下运行 inotifywait (inotify-tools-3.14-1),但是,它给出了以下错误并且没有建立监视。此外,由于它在 while 循环中,因此创建了许多 inotify
我需要一个 VM 来进行开发,而我的主机就是我的 IDE。我发现 inotifywait 不适用于共享文件夹,因为我正在使用 Virtual Box 与我的 Linux guest 共享本地文件夹。
我有一个脚本可以(递归地)监视目录并在文件更改时执行命令。当如下使用监视标志时,这可以正常工作: #!/bin/sh inotifywait -m -r /path/to/directory |
我是一名优秀的程序员,十分优秀!