106 votes

Comment exécuter une crontab dans Cygwin sous Windows ?

Certaines commandes cygwin sont .exe de sorte que vous pouvez les exécuter avec le planificateur standard de Windows, mais d'autres n'ont pas de fichiers .exe et ne peut donc pas être exécuté depuis DOS (il semblerait).

Par exemple, je veux updatedb à exécuter la nuit.

Comment faire pour que le cron fonctionne ?

98voto

Evan Points 9261

Vous devez également installer cygrunsrv donc vous pouvez configurer cron comme un service Windows, puis exécuter cron-config .

Si vous voulez que les tâches cron envoient un courriel de toute sortie, vous devrez également installer soit exim o ssmtp (avant d'exécuter cron-config .)

Voir /usr/share/doc/Cygwin/cron-*.README pour plus de détails.

En ce qui concerne les programmes sans .exe ils sont probablement des scripts shell d'un certain type. Si vous regardez la première ligne du fichier, vous pourrez voir quel programme vous devez utiliser pour les exécuter (par exemple, " #!/bin/sh "), vous pourriez donc peut-être les exécuter à partir du planificateur Windows en appelant le programme shell (par exemple, " C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog ".)

2 votes

Notez que même si vous lui dites de NE PAS utiliser d'autres comptes, il utilisera toujours seteuid (ou autre) et échouera avec un message cryptique et contradictoire can't switch user context même si la demande explicite a été faite de NE PAS utiliser d'autres comptes. Le changement de compte avec cron sur cygwin est apparemment OBLIGATOIRE. Vous devez dire NON à l'exécution en tant que vous-même...

0 votes

Et l'option -n du cron de cygwin est également dépourvue de sens car, quoi qu'il en soit, tous les événements se retrouvent dans le journal des événements de Windows. documentation terrible et trompeuse de la part de cygwin/cron.

3 votes

Conseil : utilisez cronevents pour afficher les événements (à partir du journal des événements de Windows). Ils ne sont jamais jetés, j'élaguerais les journaux tous les quelques mois.

79voto

edoloughlin Points 2048

Vous avez deux options :

  1. Installez cron comme un service Windows, en utilisant cygrunsrv :

    cygrunsrv -I cron -p /usr/sbin/cron -a -n
    
    net start cron

    Remarque : dans les (très) anciennes versions de cron, vous devez utiliser -D au lieu de -n.

  2. Les fichiers 'non .exe' sont probablement des scripts bash, vous pouvez donc les exécuter via le planificateur Windows en invoquant bash pour exécuter le script, par exemple :

    C:\cygwin\bin\bash.exe -l -c "./full-path/to/script.sh"

4 votes

J'ai particulièrement apprécié la méthode bash.exe. Merci.

4 votes

B.T.W, j'avais besoin de spécifier le chemin comme un chemin de style unix - pour updatedb ma commande entière programmée avec le planificateur de tâches de Windows ressemblait à... c : \cygwin\bin\bash.exe -l -c "/usr/bin/updatedb"

2 votes

Je recommande vivement la méthode décrite dans cette réponse. J'ai pu utiliser C:\cygwin\bin\bash.exe -l -c " C:\full -chemin \to\<strkeep>script<strkeep>.sh " sur Windows 7.

27voto

rhoracio Points 131

Conseil d'administration http://linux.subogero.com/894/cron-on-cygwin/

Démarrez le cygwin-setup et ajoutez le paquet "cron" de la catégorie "Admin".

Nous allons exécuter cron en tant que service par l'utilisateur SYSTEM. Le pauvre SYSTEM a donc besoin d'un répertoire personnel et d'un shell. Le fichier "/etc/passwd" va les définir.

$ mkdir /root
$ chown SYSTEM:root /root
$ mcedit /etc/passwd
SYSTEM:*:......:/root:/bin/bash

Le début du service :

$ cron-config
Do you want to remove or reinstall it (yes/no) yes
Do you want to install the cron daemon as a service? (yes/no) yes
Enter the value of CYGWIN for the daemon: [ ] ntsec
Do you want the cron daemon to run as yourself? (yes/no) no
Do you want to start the cron daemon as a service now? (yes/no) yes

Utilisateurs locaux peuvent maintenant définir leurs tâches planifiées comme ceci (crontab lancera votre éditeur préféré) :

$ crontab -e  # edit your user specific cron-table HOME=/home/foo
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
# testing - one per line
* * * * *   touch ~/cron
@reboot     ~/foo.sh
45 11 * * * ~/lunch_message_to_mates.sh

Utilisateurs du domaine : il ne fonctionne pas. Le pauvre cron est incapable d'exécuter des tâches planifiées au nom des utilisateurs du domaine sur la machine. Mais il y a un autre moyen : cron exécute aussi des choses trouvées dans la table cron du niveau système dans "/etc/crontab". Insérez-y donc votre suffixe, afin que le SYSTÈME le fasse pour son propre compte :

$ touch /etc/crontab
$ chown SYSTEM /etc/crontab
$ mcedit /etc/crontab
HOME=/root
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
* * * * *   SYSTEM touch ~/cron
@reboot     SYSTEM rm -f /tmp/.ssh*

Enfin, quelques mots sur les entrées crontab. Il s'agit soit de paramètres d'environnement, soit de commandes programmées. Comme nous l'avons vu plus haut, sur Cygwin, il est préférable de créer un PATH utilisable. Le répertoire de base et l'interpréteur de commandes sont normalement pris dans "/etc/passwd".

Pour ce qui est des colonnes de commandes programmées, voir la page de manuel.

Si certaines entrées crontab ne s'exécutent pas, le meilleur outil de diagnostic est le suivant :

$ cronevents

1 votes

Il n'y a aucune raison de régler CYGWIN sur ntsec. Il est obsolète. cygwin.com/cygwin-ug-net/utilisation-cygwinenv.html

0 votes

Comment exécuter Cygwin en tant que SYSTÈME ?

0 votes

Bien que nous utilisions cygwin sshd avec l'authentification ad, je n'ai pas réussi à faire fonctionner cron de la même manière ou avec passwd -R. La seule façon dont cela a fonctionné pour moi était d'exécuter cron comme un service pour un utilisateur désigné et de faire toutes les tâches cron avec cet utilisateur. (Cygwin 2.8.0)

9voto

Reg Whitton Points 121

Je voulais juste ajouter que les options de cron semblent avoir changé. Il faut passer -n plutôt que -D.

cygrunsrv -I cron -p /usr/sbin/cron -a -n

3voto

J'ai trouvé comment faire en sorte que le service cron de Cygwin fonctionne automatiquement lorsque je me connecte à Windows 7. Voici ce qui a fonctionné pour moi :

En utilisant Notepad, créez le fichier C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt avec du contenu no sur la première ligne et yes sur la deuxième ligne (sans les guillemets). Ce sont vos deux réponses aux questions de cron-config .

Créer un fichier C:\cygwin\Cygwin_launch_crontab_service.bat avec du contenu :

@echo off
C:
chdir C:\cygwin\bin
bash  cron-config < Cygwin_launch_crontab_service_input.txt

Ajoutez un raccourci vers les éléments suivants dans le dossier de démarrage de Windows : Cygwin_launch_crontab_service.bat

Voir http://www.sevenforums.com/tutorials/1401-startup-programs-change.html si vous avez besoin d'aide sur la façon d'ajouter au démarrage. En outre, vous pouvez les ajouter au démarrage si vous le souhaitez :

Cygwin

Serveur XWin

Le premier exécute

C:\cygwin\Cygwin.bat

et le second exécute

C:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X