2013-05-17 53 views
1

我幾乎與this question的情況完全相同,只是接受的答案根本不適用於我。製作這個簡單的Python腳本是我第二次嘗試;回顯文本並將其重定向到文件也不會執行任何操作。我正在使用Raspbian Linux發行版。incron on Raspbian not working

[email protected] ~ $ incrontab -l 
/home/pi IN_CREATE,IN_DELETE /home/pi/test.py 

[email protected] ~ $ cat test.py 
#! /usr/bin/python3 
f = open('test.txt', 'a+') 
f.write('success!\n') 
f.close() 

[email protected] ~ $ touch abc.123; rm abc.123 

[email protected] ~ $ 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) 

[email protected] ~ $ ls 
bin Desktop python_games test.py 

注意主目錄中缺少test.txt

+0

umm,不應該在'test.py'的第一行讀取'#!/ usr/bin/python3',而不是在shebang和斜槓之間留出空格? – demure

+0

空間並不重要 – kevlar1818

+0

如果您要聲明解決方案不起作用,至少應發佈在應用解決方案時會發生什麼情況,而不是在您與提問者犯同樣的錯誤時發生的情況在相關的問題。 – Cairnarvon

回答

3

我在標準的Debian Wheezy上測試過。您的腳本面臨的問題來自於當前工作目錄(CWD)不符合您的期望。

設置在打開的操作的絕對路徑,以避免它的方式:

f = open('/home/pi/test.txt', 'a+') 

首先,我有恐懼無限遞歸如果test.txt改變的事件再次觸發腳本,但它似乎被處理通過incron

由於incron觸發stderr丟失,因此使用./test.py手動測試腳本非常重要。

這裏是附加信息感謝您的腳本來[email protected]選項的變化:

#! /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() 

這是註冊的方式:

$ incrontab -l 
/home/pi IN_CREATE,IN_DELETE /home/pi/test.py [email protected] 

現在,您將在/home/pi/test.txt

success on /home/pi/ with CWD=/ 

這說明你的腳本首先嚐試寫入/test.txt並且不需要文件系統的權限來執行此操作。