web-dev-qa-db-fra.com

Pourquoi je n'ai aucune entrée crontab sur OS X lorsque j'utilise vim

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

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

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

crontab -l

dit:

No crontab for mollerhoj3

Qu'est-ce que je fais mal?

73
mollerhoj

Il suffit de suivre ces étapes:

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

    30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php
    
  4. Presse Esc pour quitter le mode insertion de vim.

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

Notez toutefois que cela pourrait ne pas fonctionner en fonction du contenu de votre fichier ~/.vimrc.

178
Cao Manh Dat

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 je l'exécute

crontab ~/.crontab

A travaillé pour moi pendant plus de 20 ans sur de nombreuses saveurs d'Unix.

67
Michael Campbell

NOTE: la réponse qui dit d'utiliser 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 sur place par défaut (mais cela pourrait faire un cas spécial pour supporter crontab -e], donc si votre variable d'environnement $EDITOR est définie sur vi (valeur par défaut) ou vim, la modification de la crontab échouera . 

Pour que Vim puisse modifier le fichier sur place, vous devez procéder comme suit:

:setlocal nowritebackup

Cela devrait vous permettre de mettre à jour la crontab lorsque vous faites crontab -e avec les commandes :wq ou ZZ

Vous pouvez ajouter une autocommande dans votre fichier .vimrc pour que cela fonctionne automatiquement lors de la modification des tables de vérification:

autocmd FileType crontab setlocal nowritebackup

Une autre méthode consiste à ajouter le setlocal nowritebackup au ~/.vim/after/ftplugin/crontab.vim, qui sera chargé par Vim automatiquement lorsque vous modifiez 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
37
Dave Meybohm

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 emplacement spécial avec certaines autorisations.

Vous aurez généralement juste besoin de comprendre 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 sur OS X, vérifiez cette réponse: https://superuser.com/a/243944/2449

22
Andy

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. Utilisé Emacs au lieu de mon vim par défaut: EDITOR = emacs crontab -e (je ne sais pas pourquoi vim ne fonctionne pas)

crontab -lnow imprime les tâches cron. Maintenant, je n'ai plus qu'à comprendre pourquoi les tâches cron ne fonctionnent toujours pas ;-) 

7
mollerhoj

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 pris de developer.Apple.com

Effets du sommeil et de la mise hors tension

Si le système est éteint ou en veille, les tâches cron ne s'exécutent pas. ils ne fonctionneront pas avant la prochaine heure désignée.

Si vous planifiez un travail de lancement en définissant la clé StartCalendarInterval et que l'ordinateur est en veille au moment où le travail doit avoir été exécuté, votre travail sera exécuté à la mise en veille de l'ordinateur. Cependant, si la machine est éteinte au moment où le travail aurait dû être exécuté, le travail ne sera pas exécuté avant la prochaine heure spécifiée.

Tous les autres travaux launchd 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 planifiée du travail, les travaux cron et les travaux launchd ne sont jamais exécutés. Par exemple, si vous éteignez toujours votre ordinateur la nuit, une tâche planifiée pour s'exécuter à 1h00. ne sera jamais exécuté.

5
Roobie Nuby

Dans l'utilisateur crontab (crontab -e), ne mettez pas le champ utilisateur.

Le bon cron est:

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

La syntaxe avec le champ utilisateur est pour /etc/crontab uniquement:

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

Comme les publications précédentes ne fonctionnaient pas pour moi en raison de problèmes d'autorisations, j'ai constaté que créer un fichier crontab distinct et l'ajouter à la crontab de l'utilisateur avec le paramètre -u pendant que root fonctionnait pour moi.

Sudo crontab -u {USERNAME} ~/{PATH_TO_CRONTAB_FILE}
0
ShaneMit

L'erreur crontab: temp file must be edited in place est due à la façon dont vim traite les fichiers de sauvegarde.

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

Source le fichier:
source .bash_profile

Et ensuite, 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 ajouter/modifier des tâches cron.

Lorsque vous enregistrez avec succès votre tâche cron, le message suivant s'affiche:
crontab: installing new crontab

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

0
SR8H

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 pose problème)

export EDITOR = vim

3) éditez votre fichier de configuration vim

$ cd ~ && vim .vimrc

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

set backupcopy = yes

5) redémarrer le terminal

6) maintenant, essayez crontab edit

$ crontab -e

10 * * * * echo "bonjour le monde"

Vous devriez voir qu'il crée correctement le fichier crontab. Si vous quittez vim (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

0
Jimmy M.G. Lim