2017-04-03 70 views
0

我已經寫了一個小的Python腳本來自動增加就業機會的過程中的crontab,但通過腳本添加的作業不能正常工作和手動給工作正常時同樣的工作Python代碼添加作業的crontab不工作

這裏是代碼:

#!/usr/bin/python3 

def scheduler(time=["*","*","*","*","*"],message="no message set"): 
crontab_pointer=open('/var/spool/cron/crontabs/sky','a') 
schedule_string="\n"+" ".join(time)+" "+message+"\n" 
crontab_pointer.write(schedule_string) 
crontab_pointer.close() 


if __name__=="__main__": 
scheduler(time=["52","18","*","*","*"],message="env DISPLAY=:0 /home/sky/scripts/notify2.sh") 

回答

0

權限

確保你正在運行的Python腳本root的用戶。我做了一些快速測試,其他用戶無法訪問他們的/ var/spool/cron/crontabs/$用戶名文件。如果我可以正確記住,這是設計的。你應該使用crontab -e命令編輯你的crontab。

sudo python editcron.py

真的,你寫的Python是不完全錯誤的。它打開文件,添加字符串,然後關閉它。這裏沒有什麼突破。我只是添加了一些文件系統檢查,以確保您可以訪問該文件。

代碼

import os 

def scheduler(time=['*', '*', '*', '*', '*'], message='no message set', username='sky'): 
    crontab_fn = '/var/spool/cron/crontabs/{!s}'.format(username) 
    if not os.path.exists(crontab_fn): 
     raise StandardError("File {} missing".format(crontab_fn)) 
    if not os.access(crontab_fn, os.W_OK): 
     raise StandardError("Cannot write to file, run as root") 
    crontab_fh = open(crontab_fn, 'a') 
    schedule_string = "\n{t:s} {m:s}\n".format(
     t=' '.join(time), 
     m=message 
    ) 
    crontab_fh.write(schedule_string) 
    crontab_fh.close() 

if __name__ == "__main__": 
    time = ["52","18","*","*","*"] 
    message = "env DISPLAY=:0 /home/sky/scripts/notify2.sh" 
    scheduler(time, message) 
0

注意從人的cron:
的cron搜索crontab文件的脫機區域(在/ var /線軸/ cron的/ crontabs中)(這是在 賬戶命名的/ etc/passwd中);找到的crontabs被加載到內存中。請注意,這個目錄中的crontabs不應該是 直接訪問 - 應該使用crontab命令來訪問和更新它們。


問題:...同樣的工作,當給手動做工精細

我假設你使用crontab <filename>在這裏!


搜索一個python module或使用module subprocess.run(...)內的的.py開始從crontab <filename>

using-the-subprocess-module

回來和標誌你的問題,如果這是爲你工作或回答評論何樂而不爲。