Erro ao adicionar cronjobs no Mac OS X Lion

37

Até agora, nunca tentei adicionar uma crontask no meu Mac. Para minha surpresa, isso gerou um erro ..

[hayek@mac:/www/] 02:33:22 PM: crontab -e                                                                                                         1 .
crontab: no crontab for hayek - using an empty one
crontab: "/usr/bin/vi" exited with status 1

Como posso descobrir por que está lançando esse erro?

Estou executando o Mac OS X Lion 10.7.2

Hayek
fonte
2
Você está usando cron por um motivo específico? No OS x, ele foi amplamente substituído pelo launchd
Daniel Beck
Eu queria usar o vnstat para rastrear o uso da largura de banda, o que requer um cronjob. Sei que poderia usar um aplicativo alternativo, mas ainda assim seria útil saber como fazer o cron funcionar no Mac, se possível.
perfil
11
Você tentou crontab fileinstalar a tabela a partir de um arquivo externo? Ou usando um editor diferente como EDITOR=NANO crontab -e?
Lri
@DanielBeck Eu uso o cron porque é muito mais rápido configurar uma nova entrada do que o launchd.
Doug Harris
O que crontab -lmostra? Existem outras mensagens em /var/log/cron.logou /var/log/system.log?
Doug Harris

Respostas:

41

Em ~ / .vimrc, adicione:

    autocmd tipo de arquivo crontab setlocal nobackup nowritebackup
user442586
fonte
grande truque simples! funciona bem para mim.
Tri Nguyen
Esta é a melhor resposta e funciona bem - muito mais simples do que a que envolve a criação de uma variável env no perfil do shell, bem como a edição~/.vimrc
RichVel
Marcar isso como a resposta correta, já que minha própria resposta não é mais apropriada nem mais eficaz.
Hayek
11
Isso funciona também no Mac OS High Sierra! Obrigado por postar isso
Kearney Taaffe
44

A questão acabou por ser vie nada a ver com o cron. Fazendo export EDITOR=vimconsertou

Hayek
fonte
2
Sim, eu entendo que você encontrou o problema, e a solução é ... o que?
Gökhan Barış Aker
3
Tente fazer export EDITOR=vime tente.
Hayek
Obrigado @Hayek. Desculpe pela latência, não pude responder tão rapidamente quanto você: P. No entanto, rodar crontab com o todo-poderoso 'sudo' resolveu meu problema.
Gökhan Barış Aker
Feliz por você fazer isso funcionar.
Hayek
11
Acabei de ter o mesmo problema. A configuração EDITOR=vimnão foi corrigida - apenas me levou a um novo erro crontab: temp file must be edited in place. Eu prefiro muito o vim, no entanto, edito cronjobs com tanta frequência que fico feliz em fazê-lo NANO... embora, se alguém conhece a correção, estou muito interessado.
ricardo
35

Em um problema relacionado, se você receber a mensagem:

crontab: temp file must be edited in place

Experimentar:

1) Adicionar ao .bash_profile

alias crontab="VIM_CRONTAB=true crontab"

2) Adicionar ao .vimrc

if $VIM_CRONTAB == "true"
    set nobackup
    set nowritebackup
endif

Fonte: http://drawohara.com/post/6344279/crontab-temp-file-must-be-edit-in-place

xgMz
fonte
2
Essa é a resposta correta!!
Jacob
Isso funcionou para mim e acho que essa deve ser a resposta correta.
Shubhamoy 17/11
11
Para csh ou tcsh, usealias crontab "export VIM_CRONTAB=true; /usr/bin/crontab"
JAFaucett 22/11
11
Também acho que essa é uma resposta melhor, embora a pergunta do OP não mencione o erro exato @xgMz descrito. O crontab parece não gostar do backup do vim no comportamento de gravação / salvamento, portanto, desativá-lo como descrito aqui funciona.
Shyam Habarakada 22/03
Acabei de ter esse problema com o vim e o cron no macOS Sierra. Essa é a resposta correta!
James McCormac
8

Seu editor na variável de sistema EDITOR é vi e vi não está funcionando.

Experimentar:

export EDITOR=nano
Karim, Abdel Sanchez, Mateos
fonte
2

Eu tive o mesmo problema e segui os conselhos publicados para criar a tabela:

crontab file

E isso criou a tabela cron, e então eu pude executar

crontab -e

com o vi como editor padrão e não teve problemas. É como se o vi não pudesse salvar o arquivo, mas, uma vez criado, poderia acessá-lo. Isso é consistente com a capacidade de executar:

sudo crontab -e 

Como curiosidade, as tabelas são armazenadas em

/usr/lib/cron/tabs/UserName

que só pode ser lido como sudo.

user214155
fonte
0

A melhor maneira de diagnosticar isso seria criar um crontab novo com uma entrada simples como:

* * * * * /bin/date >> /tmp/cron_output

Se isso funcionar, o problema está no comando específico que você adicionou. Você poderia compartilhá-lo conosco e também compartilhar os resultados ao executá-lo diretamente do Terminal.app, em vez de um crontab?

tog22
fonte
11
Mesmo erro com o comando que você sugeriu. No terminal, /bin/dateretorna Wed Nov 23 15:03:49 PST 2011como esperado.
Hayek
OK, acabado de ver a sua resposta, o que explica por que você iria obter o mesmo erro - apenas pensei que poderia ajudar a diagnosticar o problema :)
tog22
0

O cron foi descontinuado em favor do launchd.

O Lingon é uma excelente ferramenta para configurar agentes launchd; costumava ser gratuito, mas agora parece ser $ 3.

A Wikipedia possui uma boa página de lançamento descrevendo todas as chaves e a ferramenta launchctl que você usa para ativá-las / desativá-las.

chrish
fonte
-1

Eu vi esse mesmo problema no OSX. A resposta é executar como root usando o comando sudo, por exemplo:

sudo crontab -e

Eu recebi essa ideia de Gökhan Barış Aker acima.

Nathan Beach
fonte
com sudovocê está indo para empregos lugar cron sob o usuário root. Os arquivos cron são diferentes para o usuário normal e o root.
Timofey