
我已經安裝了 Cygwin 和cygrunsrv
Cron,這樣我就可以享受在 Windows 中使用 Linux 風格調度的好處。我想打電話諾蒂富來自 cron 作業。
我使用以下命令將 cron 作為服務安裝:
cygrunsrv -I cron -d "CYGWIN cron" -u cron_srv -p /usr/sbin/cron -a -n
一切正常,服務正在運行並且沒有報告任何錯誤。此外,我還向該cron_srv
用戶授予了其所需的所有權限,因此它可以切換用戶上下文等。
crontab -l
給了我定義的這兩個工作:
HOME=/home/<username>
PATH=/usr/local/bin:/usr/bin:/bin:/cygdrive/c/utils/notifu:$PATH
# testing
* * * * * echo "Cron test at $(date +\%k:\%M)" >> ~/testcron.txt 2>&1
* * * * * notifu /p "Balloon Title" /t warn /w /m "event description"
cronevents
給出這個:
2014/03/03 13:08:01 [cron_srv] /usr/sbin/cron: PID 2592: (branchito) CMD (echo "Cron test at $(date +%k:%M)" >> ~/testcron.txt 2>&1)
2014/03/03 13:08:01 [cron_srv] /usr/sbin/cron: PID 4076: (branchito) CMD (notifu /p "Balloon Title" /t warn /w /m "event description")
..所以沒有錯誤。我testcron.txt
創建了文件,並使用自訂日期測試正確填充了文件。但notifu
不會彈出帶有訊息的氣球,儘管它沒有報告任何錯誤cronevents
,並且看起來執行得和他的朋友日期測試作業一樣好。
我PATH
明確地設定了我的變量,以便它可以找到該notifu
程序,即使它包含在最後一個附加中PATH
,但我想確定一下。
有趣的是,該notifu
命令從 Cygwin 終端運行沒有任何問題,氣球彈出並顯示訊息一切正常,但從 cron 作業來看,它沒有觸發。
我讀到了一些關於DISPLAY
環境變數的內容,這可能是個問題嗎?如果是這樣,我將如何在 crontab 檔案中設定它的值?在Linux上它就像DISPLAY=:0.0
,但我不知道如何在Windows上設定這個值。
編輯
做了一些更多的研究,我發現問題在於,從 Windows Vista 開始,服務僅在session 0 isolation
級別上起作用,因此它們不能作為安全預防措施與桌面交互,或者它們可以但以某種特殊的方式安全桌面實例。
我希望有人告訴我在這種情況下(我的情況)如何可能,讓該服務能夠向該notifu
應用程式發送訊息,只需彈出帶有該訊息的氣球提示,並且在不修改服務的情況下這是否可能本身,因為我不是它的作者。那麼有什麼方法可以給該服務一些logon as
權限,以便它可以在用戶空間中運行。