Pourquoi je n’ai pas d’entrée crontab sur OS X lors de l’utilisation de vim?

Je voudrais utiliser cron sur mon Mac. Je le choisis plutôt que launchd , parce que je veux pouvoir utiliser mes nouvelles connaissances sous Linux. Cependant, je n’arrive pas à faire fonctionner la commande crontab -e . Il déclenche vim, j’entre dans mon travail de test:

 0-59 * * * * mollerhoj3 echo "Hello World" 

Mais après avoir sauvé et quitté ( :wq ),

 crontab -l 

dit:

 No crontab for mollerhoj3 

Qu’est-ce que je fais mal?

Suivez simplement ces étapes:

  1. Dans le terminal: crontab -e .
  2. Appuyez sur i pour passer en mode d’insertion de vim.
  3. Tapez votre travail cron, par exemple:

     30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php 
  4. Appuyez sur Echap pour quitter le mode d’insertion de vim.

  5. Tapez ZZ pour quitter vim (doit être en majuscules).
  6. Vous devriez voir le message suivant: crontab: installing new crontab . Vous pouvez vérifier le fichier crontab à l’aide de crontab -l .

Notez cependant que cela peut ne pas fonctionner selon le contenu de votre fichier ~/.vimrc .

Je n’ai jamais eu ce problème, mais je crée un fichier ~ / .crontab et le modifie (ce qui me permet de le sauvegarder, Time Machine ou autre), puis de l’exécuter

 crontab ~/.crontab 

A travaillé pour moi depuis plus de 20 ans sur de nombreuses saveurs d’Unix.

REMARQUE : la réponse à la commande ZZ ne fonctionne pas pour moi sur mon système Mavericks, mais cela est probablement dû à quelque chose dans la configuration de vim car si je commence par un .vimrc vierge, la réponse acceptée fonctionne. Ma réponse pourrait fonctionner pour vous si l’autre solution ne fonctionne pas.

Sur MacOS X, selon la page de manuel crontab, le fichier temporaire crontab créé avec crontab -e doit être modifié sur place. Vim n’édite pas par défaut sur place ( mais peut prendre en charge certains cas particuliers pour supporter crontab -e ), donc si votre variable d’environnement $EDITOR est définie sur vi (valeur par défaut) ou vim , l’édition de la crontab échouera toujours.

Pour que Vim modifie le fichier sur place, vous devez:

 :setlocal nowritebackup 

Cela devrait vous permettre de mettre à jour le crontab lorsque vous effectuez une crontab -e avec les commandes :wq ou ZZ .

Vous pouvez append une autocommande dans votre fichier .vimrc pour que cela fonctionne automatiquement lors de la modification des crontabs:

 autocmd FileType crontab setlocal nowritebackup 

Une autre méthode consiste à append setlocal nowritebackup à ~/.vim/after/ftplugin/crontab.vim , qui sera automatiquement chargé par Vim lorsque vous éditez un fichier crontab si le plug-in Filetype est activé. Vous pouvez également vérifier le système d’exploitation si vous utilisez vos fichiers vim sur plusieurs plates-formes:

 ""In ~/.vim/after/ftplugin/crontab.vim if has("mac") setlocal nowritebackup endif 

L’utilisation de cron sur OS X est déconseillée. launchd est utilisé à la place. Essayez man launchctl pour commencer. Vous devez créer des fichiers XML spéciaux qui définissent vos travaux et les placer dans un endroit spécial avec certaines permissions.

Vous aurez généralement besoin de comprendre le launchctl load

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/launchctl.1.html

http://nb.nathanamy.org/2012/07/schedule-jobs-using-launchd/

modifier

Si vous voulez vraiment utiliser cron sous OS X, consultez cette réponse: https://superuser.com/a/243944/2449

J’ai fait 2 choses pour résoudre ce problème.

  1. J’ai touché le fichier crontab, décrit dans ce lien coderwall.com/p/ry9jwg (Merci @ Andy).
  2. Emacs utilisé au lieu de mon vim par défaut: EDITOR = emacs crontab -e (je ne sais pas pourquoi vim ne fonctionne pas)

crontab -l imprime maintenant les cronjobs. Il ne me rest plus qu’à comprendre pourquoi les cronjobs ne fonctionnent toujours pas 😉

Différence entre cron et launchd

Comme cela a été mentionné, cron est obsolète (mais supporté), et launchd est recommandé pour OS X.

Ceci est tiré de developer.apple.com

Effets du sumil et de la mise hors tension

Si le système est désactivé ou en veille, les tâches cron ne sont pas exécutées. ils ne fonctionneront pas avant la prochaine heure désignée.

Si vous planifiez un travail launchd en définissant la clé StartCalendarInterval et que l’ordinateur est en veille lorsque le travail doit être exécuté, votre travail s’exécute lorsque l’ordinateur se réveille. Toutefois, si la machine est désactivée lorsque le travail doit être exécuté, le travail ne s’exécute pas avant la prochaine heure désignée.

Tous les autres travaux lancés sont ignorés lorsque l’ordinateur est éteint ou en veille; ils ne fonctionneront pas avant la prochaine heure désignée.

Par conséquent, si l’ordinateur est toujours éteint à l’heure programmée du travail, les travaux cron et les jobs launchd ne sont jamais exécutés. Par exemple, si vous éteignez toujours votre ordinateur la nuit, un travail dont l’exécution est programmée à 1 heure du matin ne sera jamais exécuté.

Dans crontab utilisateur ( crontab -e ) ne placez pas le champ utilisateur.

Le cron correct est:

 0-59 * * * * echo "Hello World" 

La syntaxe avec le champ utilisateur concerne uniquement /etc/crontab :

 0-59 * * * * mollerhoj3 echo "Hello World" 

Comme les publications précédentes ne fonctionnaient pas pour moi à cause de certains problèmes d’permissions, j’ai trouvé que créer un fichier crontab distinct et l’append au crontab de l’utilisateur avec le paramètre -u alors que root fonctionnait pour moi.

 sudo crontab -u {USERNAME} ~/{PATH_TO_CRONTAB_FILE} 

Ce qui précède a un mélange de réponses correctes. Ce qui a fonctionné pour moi pour avoir exactement les mêmes erreurs sont:

1) éditez votre fichier de configuration bash

$ cd ~ && vim .bashrc

2) dans votre fichier de configuration bash, assurez-vous que l’éditeur par défaut est vim plutôt que vi (ce qui cause le problème)

export EDITOR = vim

3) éditez votre fichier de configuration vim

$ cd ~ && vim .vimrc

4) assurez-vous que set backupcopy est oui dans votre .vimrc

set backupcopy = yes

5) redémarrer le terminal

6) maintenant essayer de modifier crontab

$ crontab -e

10 * * * * echo “Bonjour tout le monde”

Vous devriez voir qu’il crée le fichier crontab correctement. Si vous quittez vim (soit ZZ ou: wq) et listez crontab avec la commande suivante; vous devriez voir le nouveau travail cron. J’espère que cela t’aides.

$ crontab -l

L’erreur crontab: temp file must be edited in place cause de la manière dont vim traite les fichiers de sauvegarde.

Pour utiliser vim avec cron, ajoutez les lignes suivantes dans votre fichier .bash_profile
export EDITOR=vim
alias crontab="VIM_CRONTAB=true crontab"

Source du fichier:
source .bash_profile

Et puis dans votre .vimrc ajoutez:
if $VIM_CRONTAB == "true" set nobackup set nowritebackup endif

Cela désactivera les sauvegardes lors de l’utilisation de vim avec cron. Et vous pourrez utiliser crontab -e pour append / éditer des cronjobs.

En enregistrant correctement votre tâche, vous verrez le message:
crontab: installing new crontab

La source:
http://drawohara.com/post/6344279/crontab-temp-file-must-be-edited-in-place entrez la description du lien ici