Executa todos os Cronjobs no ambiente ~ / .zshenv

1

Eu quero executar todos os cronjobs no ambiente definido em meu ~ / .zshenv, e quero redirecionar STDOUT e STDERR de cada cronjob para um único arquivo de log. Eu estou no OS X 10.9. Qual é a maneira mais limpa de conseguir isso?

    
por Sean Mackesey 09.09.2014 / 18:45

1 resposta

1

~/.zshenv é carregado por zsh quando é iniciado (exceto quando iniciado com -f ou se o diretório de configuração é alterado definindo ZDOTDIR ). Não é carregado (não pode ser entendido) por qualquer outro shell. Portanto, organizar a carga ~/.zshenv é equivalente a organizar seus trabalhos para serem executados pelo zsh. Defina a variável SHELL no crontab; isso se aplica a todos os trabalhos.

Cuidado ao colocar coisas em .zshenv , porque ele é lido por cada shell. Por exemplo, se você definir uma variável de ambiente para executar alguns programas em um ambiente diferente (por exemplo, desejar versões diferentes de alguns arquivos ou programas, para definir algumas variáveis de ambiente …PATH ), isso não funcionará se .zshenv substitui essas variáveis.

Em particular, se você deseja definir variáveis de ambiente para suas sessões interativas e agendadas, não use .zshenv . Use um arquivo que você fonte de ~/.profile e crontabs. Comece cada trabalho do cron com . ~/.my_environment.sh; (você não pode fazer isso globalmente).

A saída das tarefas agendadas é enviada por e-mail para você usando o recurso de correio local. Eu não sei como isso é configurado no OSX. Eu não recomendo usar um arquivo de log, porque o cron cuida de enviar um email por trabalho e de não enviar um email de trabalhos bem sucedidos (sem saída, código de retorno 0)). Se você realmente quiser usar um arquivo de log, inicie cada tarefa com algo como exec >~/cron-logs/nameofthisjob-$(date +\%Y\%m\%d-\%H\%M) 2>&1 && .

    
por 10.09.2014 / 11:47

Tags