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?
Il suffit de suivre ces étapes:
crontab -e
.Tapez votre travail cron, par exemple:
30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php
Presse Esc pour quitter le mode insertion de vim.
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
.
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.
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
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://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
J'ai fait 2 choses pour résoudre ce problème.
EDITOR = emacs crontab -e
(je ne sais pas pourquoi vim ne fonctionne pas)crontab -l
now imprime les tâches cron. Maintenant, je n'ai plus qu'à comprendre pourquoi les tâches cron ne fonctionnent toujours pas ;-)
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
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é.
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"
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}
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_profileexport 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
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