A caixa de diálogo do AppleScript e o comando 'say' repetido não funcionam no cronjob do OS X

3

Eu tenho um script no OS X que parece em um determinado diretório para o arquivo com o mtime mais recente, vê se é (passado) um determinado tamanho e, em caso afirmativo, cria uma caixa de diálogo AppleScript + repete um invocação do comando say até que a caixa de diálogo seja fechada. Eu verifiquei que este script funciona para qualquer diretório, incluindo o diretório em que estou interessado. No entanto, ele parece funcionar corretamente quando eu o executo a partir de um shell interativo (ou seja, via zsh no Terminal.app, xterm, etc ou Eshell no Emacs). Veja, quando executo o script como um cronjob, tudo o que ele faz é executar a invocação say no script uma vez; nenhuma caixa de diálogo e nenhuma repetição de say até que a caixa seja fechada, que é o que espero fazer. No entanto, não estou recebendo mensagens de erro no meu mail , então parece que cron acha que tudo está indo bem.

A maneira que eu tenho o cronjob configurado é assim:

SHELL=/bin/zsh
*/1 * * * * . $HOME/.zshrc && ps caux | grep -iq my_script && : || $HOME/bin/my_script /some/dir

Tradução: ele é executado a cada minuto, primeiro obtendo ~/.zshrc (para definir variáveis de ambiente como $PATH et al.). Em seguida, ele executa ps caux , procurando o nome do processo do meu script e, se uma correspondência for encontrada, não será ativada. Caso contrário, execute meu script, segmentando /some/dir . A verificação para ver se meu processo está em execução é feita para garantir que nenhuma ocorrência sobreposta ocorra e verifiquei também se isso funciona corretamente.

Então, quando executo o código desse cronjob em um terminal, tudo funciona bem. No entanto, como explicado anteriormente, algo está fazendo com que o próprio cronjob não seja executado como esperado. Quando consultei o Google sobre esse tipo de problema, encontrei essa pergunta no SO que parece espelhar meu problema, mas no Linux . Eu tentei a resposta aceita lá, que afirma tentar iniciar o trabalho via xterm . Ou seja:

*/1 * * * * . $HOME/.zshrc && xterm -e ps caux | grep -iq my_script && : || $HOME/bin/my_script /some/dir

No entanto, isso foi em vão. Novamente, executar o código para este cronjob por meio de um shell interativo funcionou conforme o esperado, mas cron ainda executou o script de forma peculiar, com a única diferença sendo que uma janela xterm apareceu por uma fração de segundo a cada minuto.

Estou confuso sobre o motivo pelo qual isso está acontecendo e gostaria que o script funcionasse da mesma forma quando executado a partir de um shell interativo. Como posso realizar isso e por que o cron está executando o script de maneira inesperada?

    
por GDP2 01.12.2016 / 23:50

0 respostas