我已经安装了 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
权限,以便它在用户空间中运行。