incron 作业不写入临时目录

incron 作业不写入临时目录

我遇到了一个非常奇怪的问题,我可能没有正确解决,但我尝试了一个最小的例子:

在 20.04 上的 20.04 lxd 容器中,我尝试运行由 incron 触发的作业。对于我的最小示例,这是我的 incron 行:

/home/scanfiler/test    IN_CLOSE_WRITE  /home/scanfiler/test.sh &>> /tmp/log-scanfiler-test

这是我的测试脚本

#!/bin/bash
logger "Starting"
touch /tmp/test/test-$(date +%s)-1
touch ~/test_out/test-$(date +%s)-1
sleep 20
touch /tmp/test/test-$(date +%s)-2
touch ~/test_out/test-$(date +%s)-2
logger "Done"

我正在写入日志,然后在主文件夹中创建一个文件,在 tmp 文件夹中创建一个文件,然后等待 20 秒(这样我就有时间在运行期间检查,以防 tmp 以某种方式立即被清除),然后我正在写入更多文件。

事情是这样的:

scanfiler ~scanfiler # rm test/testblah && touch test/testblah
scanfiler ~scanfiler # journalctl -xe|tail
Aug 17 14:59:26 scanfiler incrond[2526]: PATH (/home/scanfiler/test) FILE (testblah) EVENT (IN_CLOSE_WRITE)
Aug 17 14:59:26 scanfiler incrond[2526]: (scanfiler) CMD (/home/scanfiler/test.sh &>> /tmp/log-scanfiler-test)
Aug 17 14:59:26 scanfiler scanfiler[1250558]: Starting
scanfiler ~scanfiler # 
scanfiler ~scanfiler # ls /tmp/test 
scanfiler ~scanfiler # ls test_out 
test-1597669166-1
scanfiler ~scanfiler # journalctl -xe|tail
Aug 17 14:59:26 scanfiler incrond[2526]: PATH (/home/scanfiler/test) FILE (testblah) EVENT (IN_CLOSE_WRITE)
Aug 17 14:59:26 scanfiler incrond[2526]: (scanfiler) CMD (/home/scanfiler/test.sh &>> /tmp/log-scanfiler-test)
Aug 17 14:59:26 scanfiler scanfiler[1250558]: Starting
scanfiler ~scanfiler # journalctl -xe|tail
Aug 17 14:59:26 scanfiler incrond[2526]: PATH (/home/scanfiler/test) FILE (testblah) EVENT (IN_CLOSE_WRITE)
Aug 17 14:59:26 scanfiler incrond[2526]: (scanfiler) CMD (/home/scanfiler/test.sh &>> /tmp/log-scanfiler-test)
Aug 17 14:59:26 scanfiler scanfiler[1250558]: Starting
Aug 17 14:59:46 scanfiler scanfiler[1250627]: Done
scanfiler ~scanfiler # ls /tmp/test       
scanfiler ~scanfiler # ls test_out                                
test-1597669166-1  test-1597669186-2
scanfiler ~scanfiler # ls /tmp/log-scanfiler-test
ls: cannot access '/tmp/log-scanfiler-test': No such file or directory

如您所见,即使在运行时,也不会创建 tmp 文件,而主目录中的文件却在那里。最终,甚至连应该在 tmp 中的日志文件都不存在了。当由同一用户在控制台中运行时,一切都正常,所以我的 tmp 权限可能没有受到破坏。

有人能告诉我这里发生了什么吗?我的脚本中还有更多奇怪的问题(在控制台中运行时运行良好),但也许它们是相关的,所以我想先解决这个问题。

答案1

好的,正如评论中暗示的那样,我明白了。我留下这个答案是因为我在谷歌上没有找到任何关于 incron (或 cron) 和 tmp 目录的信息,而且这些机制似乎相当新 (在我旧的 18.04 安装中没有)。

incron 的 systemd 服务有以下行

PrivateTmp=true

这会导致服务在 /tmp 下有一个私有的 tmp 目录。我不想要这种行为,所以我使用以下命令禁用它

 systemctl edit --full incron.service

并删除该行(从 /etc/... 中的 /lib/... 创建原始服务文件的新版本)。

我认为在此之前我还观察到了私有 tmp 目录内的权限问题等一些奇怪的行为,但我没有进一步调查,因为无论如何出于其他原因我需要一个全局 tmp。

相关内容