Exécuter un script shell périodiquement sur Mac OS X sans racine autorisation
Je veux lancer un fichier avec .type sh ou .py sur mac os x sans utiliser de racine ,
J'ai cherché dans google et trouvé launchctl peut m'aider ,
j'ai donc lu le tutoriel et faire de même dans le tuto mais cela ne fonctionne pas pour moi , [je l'aide de mac os x 10.9 x64]
Mon .fichier plist [1.sh fichier dans toutes les 60 secondes] :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.alvin.crontabtest</string>
<key>ProgramArguments</key>
<array>
<string>/Users/paul/Desktop/1.sh</string>
</array>
<key>Nice</key>
<integer>1</integer>
<key>StartInterval</key>
<integer>60</integer>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/AlTest1.err</string>
<key>StandardOutPath</key>
<string>/tmp/AlTest1.out</string>
</dict>
</plist>
source de 1.sh:
echo '+' >> /Users/paul/Desktop/worked.txt
J'ai mis Exécuter.plist dans /Utilisateurs/paul/Exécuter.plist
et exécuter la commande dans le terminal :
launchctl load /Users/paul/Run.plist
Launchctl start com.alvin.crontabtest
commandes s'exécutent sans aucune erreur, mais je vois pas
rien dans worked.txt
quelqu'un peut m'aider s'il vous plaît ?
vérifiez la console d'erreurs
OriginalL'auteur user3671325 | 2014-05-26
Vous devez vous connecter pour publier un commentaire.
Aucune raison particulière pour laquelle vous ne voulez pas utiliser une normale crontab?
Cette commande doit ajouter une tâche cron qui s'exécute une fois par minute.
NOTEZ que cette commande va aussi remplacer la crontab que vous avez déjà. Le
crontab -
commande doit être utilisée avec prudence, car un court-cut.Si vous souhaitez modifier un crontab, afin d'éviter d'effacer précédemment défini emplois, vous pouvez utiliser
crontab -e
. (S'il se lancevim
et vous ne savez pas comment utiliservim
, vous pouvez quitter en appuyant sur la touche ESC:q!Entrée et puis aller trouver de l'éditeur de documentation.)Si vous voulez des instructions sur la façon de modifier les crontabs, type
man crontab
à votre shell. Si vous voulez des informations sur la syntaxe du fichier crontab,man 5 crontab
va vous montrer que.Profitez-en!
Mise à JOUR: (pour les commentaires)
Pour exécuter votre travail toutes les 30 secondes nécessite un simple hack. Cron ne fonctionne emplois par minute, afin de faire tourner les choses toutes les 30 secondes, vous pouvez avoir deux emplois, dont l'un dispose d'un délai de 30 secondes. Par exemple:
Espère que cette aide.
c'est ajouter à ma tâche cron mais n'a pas l'exécuter ! après 2minute , je dois exécuter n'importe quelle commande après echo "* * * * * /Users/paul/Desktop/1.sh" | crontab ?
Alors que le
cron
/crontab
avis est utile, en principe, vos conseils, se résume à ceci: "Vous avez de la difficulté à faire quelque chose. Au lieu de mon pour vous aider avec cela, pourquoi ne pas essayer quelque chose de différent?". Même si cela peut être approprié pour viciée à la base des approches, c'est pas dans le cas à portée de main. En effet, les OP du problème n'était pas avec les.plist
fichier pourlaunchd
à tous, mais avec son/sa script. Voir ma réponse pour les avantages et les inconvénients de l'utilisation decron
vslaunchd
sur OS X.MERCI de ne pas enterrer
The command I gave you, with the dash at the end, will install the quoted output as a crontab, **replacing any crontab that is currently in place**
(l'emphase est mienne) dans un commentaire. Le temps d'un naïf lecteur a essayé l'extrait de code dans votre réponse, ils peuvent avoir involontairement effacé leurscrontab
fichier.Merci pour l'explication et la mise à jour de votre réponse. Je suis d'accord qu'il est utile de savoir sur
cron
comme un simple et portable, de remplacement ; il est en effet facile de se tromper aveclaunchd
(bien que dans le cas à portée de main un coup d'oeil àConsole.app
aurait révélé le problème).OriginalL'auteur ghoti
Pour clarifier: Le OP
.plist
fichier lui-même était parfaitement OK - le problème s'est avéré être à l'intérieur de le script shell appelé (non montré dans la question).Sur OS X, à l'aide de
.plist
fichiers chargés par CLIlaunchctl
et invoquée par le démon du gestionnaire delaunchd
est le préféré façon de planification (récurrent) tâches (voir ci-dessous pour plus de détails).Choses à noter:
launchd
.plist
fichiers est décrit dansman launchd.plist
.plist
fichier à charger à chaque fois que la actuel utilisateur se connecte, il doit être placé dans~/Library/LaunchAgents/
(tous les utilisateurs fichiers doivent être placés dans/Library/LaunchAgent/
- nécessite les privilèges de root).StandardOutPath
etStandardErrorPath
signifie que les invocations ajouter pour les fichiers spécifiés, ce qui signifie que ces fichiers continuer à croître indéfiniment, sauf gérés à l'externe.Console.app
et de regarder pourcom.apple.launchd.peruser
entrées - un défaut d'invoquer la commande spécifiée dans la.plist
montrerait-il.@ghoti réponse décrit un Unix en général, alternative à
launchd
,cron
(généralement utilisé sous Linux):Comme pour combien de
cron
concerne OS X: @ghoti demande:Sur OS X,
man crontab
conseille (italiques ajoutés):La ligne de fond est-ce:
cron
etcrontab
, en supposant que:launchd
, peuvent exister.cron
's limites et ne peut travailler avec/autour d'eux.launchd
fonctionnalité et ainsi préciser périodique des tâches en arrière-plan via.plist
fichiers dans/Library/LaunchAgents
(pour tous les utilisateurs) ou~/Library/LaunchAgents
(pour l'utilisateur courant).launchd
fournit, aller avec spécification des tâches en arrière-plan via.plist
dossiers évalués parlaunchd
.Ajoutant simple
cron
tâches est probablement plus simple que de créer.plist
fichiers pourlaunchd
, mais de la 3e partie des utilitaires tels que Lingon 3 peut aider avec ce dernier.Aussi, il y a des différences subtiles dans la façon dont
cron
tâches sont invoqués contre par utilisateurlaunchd
tâches: par exemple, les anciens ne permettent pas d'interaction de l'utilisateur via AppleScript, tandis que le second ne.Cas re accroissement de la flexibilité du
launchd
: l'OP, dans un suivi des commentaires, demande l'exécution de la tâche chaque 30 secondes:La intervalle minimum pour
cron
tâches est de 60 secondes, nécessitant la solution de contournement dans @ghoti de réponse.Par contre, avec les
launchd
.plist
fichier, la modification de<key>StartInterval</key><integer>60</integer>
à<key>StartInterval</key><integer>30</integer>
est assez.man launchd.plist
.OriginalL'auteur mklement0