Instalei o Cygwin com cygrunsrv
e Cron para poder usar os benefícios de usar o agendamento no estilo Linux no Windows. Quero chamar notifu de um trabalho cron.
Eu instalei o cron como um serviço usando o comando:
cygrunsrv -I cron -d "CYGWIN cron" -u cron_srv -p /usr/sbin/cron -a -n
Tudo está OK, o serviço está sendo executado e não está reportando erros. Além disso, dei a esse cron_srv
user todos os privilégios necessários, para que ele possa alternar contextos de usuários, etc.
crontab -l
fornece estes dois trabalhos que defini:
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
dá isto:
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")
.. assim sem erros. E eu tenho meu arquivo testcron.txt
criado e preenchido corretamente com meu teste de data personalizado. Mas notifu
não abre um balão com mensagem, apesar de não reportar nenhum erro em cronevents
, e parece ser executado tão bem quanto seu trabalho de teste de data de amizade.
Eu configurei minha variável PATH
explicitamente para que ela possa encontrar o programa notifu
, mesmo que esteja contida no último PATH
anexado, mas eu queria ter certeza.
A parte interessante é que o comando notifu
roda sem qualquer problema no terminal Cygwin, o balão está aparecendo com a mensagem tudo bem, mas a partir do trabalho de engenharia não está funcionando.
Eu li algo sobre a variável de ambiente DISPLAY
, isso poderia ser um problema talvez? Se sim, como eu configuraria seu valor no arquivo crontab? No Linux, é como DISPLAY=:0.0
, mas não sei como definir esse valor no Windows.
EDITAR
Pesquisando mais, descobri que o problema está no fato de que, no Windows Vista, os serviços atuam apenas e em session 0 isolation
level, por isso não podem interagir com o Desktop como precaução de segurança, ou podem mas de alguma forma especial de instância de área de trabalho segura.
Gostaria que alguém me dissesse como seria possível, neste caso (meu caso), que esse serviço pudesse enviar uma mensagem para esse notifu
app, justo para o balão pop-up com essa mensagem e que isso é possível sem modificar o serviço em si, porque eu não sou o autor dele. Então, existe alguma maneira que eu poderia dar a esse serviço algumas permissões de logon as
, então ele agiria no espaço do usuário.