Erreur lors de l'ajout de tâches cron dans Mac OS X Lion

37

Jusqu'à présent, je n'ai jamais tenté d'ajouter une crontask sur mon Mac. À ma grande surprise, il a jeté une erreur ..

[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

Comment puis-je comprendre pourquoi il lance cette erreur?

J'utilise Mac OS X Lion 10.7.2

Hayek
la source
2
Utilisez-vous cron pour une raison spécifique? Sous OS x, il a été largement remplacé par launchd
Daniel Beck
Je voulais utiliser vnstat pour suivre l'utilisation de la bande passante, ce qui nécessite un cronjob. Je sais que je pourrais utiliser une application alternative, mais il serait toujours utile de savoir comment faire fonctionner cron sur Mac, si possible.
Hayek
1
Avez-vous essayé crontab filed'installer la table à partir d'un fichier externe? Ou en utilisant un éditeur différent comme EDITOR=NANO crontab -e?
Lri
@DanielBeck J'utilise cron car il est beaucoup plus rapide de configurer une nouvelle entrée que launchd.
Doug Harris
Que crontab -lmontre-t-on? Y a-t-il d'autres messages dans /var/log/cron.logou /var/log/system.log?
Doug Harris

Réponses:

41

Dans ~ / .vimrc, ajoutez:

    autocmd filetype crontab setlocal nobackup nowritebackup
user442586
la source
super truc simple! fonctionne bien pour moi.
Tri Nguyen
Ceci est la meilleure réponse et fonctionne bien - beaucoup plus simple que celle impliquant la définition d'une variable env dans le profil de shell ainsi que l'édition~/.vimrc
RichVel
Marquer cela comme la bonne réponse car ma propre réponse n'est plus appropriée ni la plus efficace.
Hayek
1
Cela fonctionne aussi dans Mac OS High Sierra! Merci d'avoir posté ceci
Kearney Taaffe
44

Le problème s'est avéré être viet rien à voir avec cron. Faire le export EDITOR=vimfixer

Hayek
la source
2
Oui, je comprends que vous avez trouvé le problème, et la solution est ... quoi?
Gökhan Barış Aker
3
Essayez de le faire, export EDITOR=vimpuis essayez-le .
Hayek
Merci @Hayek. Désolé pour la latence, je n'ai pas pu répondre aussi rapidement que vous: P. Cependant, exécuter crontab avec le tout-puissant 'sudo' a résolu mon problème.
Gökhan Barış Aker
Heureux que tu es parvenu à le faire fonctionner.
Hayek
1
Je viens d'avoir le même problème. Le réglage EDITOR=vimne l'a pas corrigé - cela m'a juste conduit à une nouvelle erreur crontab: temp file must be edited in place. Je préfère de loin vim, mais je modifie les cronjobs si rarement que je suis assez content de le faire dans NANO... si quelqu'un connaît la solution, je suis très intéressé.
ricardo
35

Sur un problème connexe, si vous obtenez le message:

crontab: temp file must be edited in place

Essayer:

1) Ajoutez à .bash_profile

alias crontab="VIM_CRONTAB=true crontab"

2) Ajouter à .vimrc

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

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

xgMz
la source
2
C'est la bonne réponse !!
Jacob
Cela a fonctionné pour moi et je pense que cela devrait être la bonne réponse.
Shubhamoy
1
Pour csh ou tcsh, utilisezalias crontab "export VIM_CRONTAB=true; /usr/bin/crontab"
JAFaucett
1
Je pense également que c'est une meilleure réponse bien que la question du PO ne mentionne pas l'erreur exacte @xgMz décrite. crontab ne semble pas aimer la sauvegarde vim sur le comportement d'écriture / sauvegarde, donc la désactiver comme décrit ici fonctionne.
Shyam Habarakada
Je viens d'avoir ce problème avec vim et cron sur macOS Sierra. Ceci est la bonne réponse!
James McCormac
8

Votre éditeur sur la variable système EDITOR est vi et vi ne fonctionne pas.

Essayer:

export EDITOR=nano
Abdel Karim Mateos Sanchez
la source
2

J'ai eu le même problème et j'ai suivi les conseils publiés pour créer la table:

crontab file

Et cela a créé la table cron, puis j'ai pu exécuter

crontab -e

avec vi comme éditeur par défaut et n'a eu aucun problème. C'est comme si vi ne pouvait pas enregistrer le fichier, mais une fois créé, il pouvait y accéder. Cela revient à pouvoir exécuter:

sudo crontab -e 

Par curiosité, les tableaux sont stockés dans

/usr/lib/cron/tabs/UserName

qui ne peut être lu que comme sudo.

user214155
la source
0

La meilleure façon de diagnostiquer cela serait de créer une nouvelle crontab avec une entrée simple comme:

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

Si cela fonctionne, le problème vient de la commande spécifique que vous avez ajoutée. Pourriez-vous le partager avec nous, et également partager les résultats lorsque vous l'exécutez directement à partir de Terminal.app, plutôt qu'à partir d'une crontab?

tog22
la source
1
Même erreur avec la commande que vous avez suggérée. Dans le terminal, /bin/dateretourne Wed Nov 23 15:03:49 PST 2011comme prévu.
Hayek
OK, je viens de voir votre réponse, ce qui explique pourquoi vous obtiendriez la même erreur - pensiez simplement que cela pourrait aider à diagnostiquer le problème :)
tog22
0

cron est déconseillé au profit de launchd.

Lingon est un excellent petit outil pour configurer des agents launchd; autrefois gratuit, il semble maintenant être de 3 $.

Wikipedia a une bonne page launchd décrivant toutes les clés et l'outil launchctl que vous utilisez pour les activer / désactiver.

chrish
la source
-1

J'ai vu ce même problème sur OSX. La réponse est d'exécuter en tant que root en utilisant la commande sudo, par exemple:

sudo crontab -e

J'ai eu cette idée de Gökhan Barış Aker ci-dessus.

Nathan Beach
la source
avec sudovous allez placer les tâches cron sous l'utilisateur root. Les fichiers cron sont différents pour votre utilisateur normal et celui racine.
Timofey