首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Raspbian上的incron不工作

Raspbian上的incron不工作
EN

Stack Overflow用户
提问于 2013-05-17 12:26:09
回答 1查看 1.1K关注 0票数 1

我的情况几乎和this question一样,除了公认的答案对我根本不起作用。创建这个简单的Python脚本是我的第二次尝试;回显文本并重定向到文件也没有任何作用。我使用的是Raspbian linux发行版。

代码语言:javascript
复制
pi@raspberrypi ~ $ incrontab -l
/home/pi IN_CREATE,IN_DELETE /home/pi/test.py

pi@raspberrypi ~ $ cat test.py 
#! /usr/bin/python3 
f = open('test.txt', 'a+')
f.write('success!\n')
f.close()

pi@raspberrypi ~ $ touch abc.123; rm abc.123

pi@raspberrypi ~ $ tail -n 3 /var/log/syslog
May 17 00:17:09 raspberrypi incrond[1799]: (pi) CMD (/home/pi/test.py )
May 17 00:18:36 raspberrypi incrond[1799]: (pi) CMD (/home/pi/test.py )
May 17 00:18:36 raspberrypi incrond[1799]: (pi) CMD (/home/pi/test.py )

pi@raspberrypi ~ $ ls
bin  Desktop  python_games  test.py

请注意,主目录中缺少test.txt

EN

回答 1

Stack Overflow用户

发布于 2013-06-01 04:20:10

我在一个标准的Debian Wheezy上进行了测试。您的脚本面临的问题来自于当前工作目录(CWD)不是您所期望的。

在打开操作中设置绝对路径是避免这种情况的一种方法:

代码语言:javascript
复制
f = open('/home/pi/test.txt', 'a+')

首先,我担心如果test.txt更改的事件再次触发脚本,会出现无限递归,但这似乎是由incron处理的。

由于标准错误在被incron触发时会丢失,因此使用./test.py手动测试脚本非常重要。

以下是您的脚本的一个变体,其中包含$@选项的附加信息:

代码语言:javascript
复制
#! /usr/bin/python3
import sys
import os
f = open('/home/pi/test.txt', 'a+')
f.write('success on ' + sys.argv[1] + ' with CWD=' + os.getcwd() + '\n')
f.close()

它是这样注册的:

代码语言:javascript
复制
$ incrontab -l
/home/pi IN_CREATE,IN_DELETE /home/pi/test.py $@

现在,您将在/home/pi/test.txt中看到

代码语言:javascript
复制
success on /home/pi/ with CWD=/

这说明您的脚本首先尝试编写/test.txt,并且不需要文件系统上的权限即可执行此操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16601386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档