不断观察套接字文件,如果不存在则运行命令?

时间:2019-09-02 13:09:50

标签: shell file watch

似乎我的屏幕锁定了一段时间后,我的S.gpg-agent.ssh消失了,因此为了继续使用我的钥匙,我必须重新初始化它。

显然,这是一个相对频繁的情况,因此我为Shell编写了一个函数来杀死gpg-agent,重新启动它并重置适当的环境变量。


这可能是一个“ X-Y问题”,X在此行上方,但我认为在任何情况下了解下面的Y都更有用。


当现存文件不再存在时,如何自动运行命令?

我想出的最好的方法是:

nohup echo "$file" | entr $command &

在登录时。但是entr会在文件更改时运行命令,而不仅仅是删除文件,因此我不清楚套接字对它的影响。

2 个答案:

答案 0 :(得分:0)

根据您的评论,cron守护程序不适合。

观看套接字文件删除

尝试auditd

# auditctl -w /var/run/<your_socket_file> -p wa 
$ tail -f /var/log/audit/audit.log | grep 'nametype=DELETE'

事件发生时如何运行脚本

如果要在套接字删除时运行脚本,则可以使用while循环,例如:

tail -Fn0 /var/log/audit/audit.log | grep 'name=<your_socket_file>' | grep 'nametype=DELETE' \
while IFS= read -r line; do
  # your script here
done

Tom Klino和他的answer

致敬

答案 1 :(得分:0)

您没有提到所使用的操作系统,但是如果是Linux,则可以使用inotify-tools软件包中的inotifywait

#!/bin/sh

while inotifywait -qq -e delete_self /path/to/S.gpg-agent.ssh; do
    echo "Socket was deleted!"
    # Recreate it.
done