Comment exécutez-vous un crontab dans Cygwin sur Windows?

Certaines commandes cygwin sont des fichiers .exe, Vous pouvez donc les exécuter avec le planificateur Windows standard, mais d'autres n'ont pas d'extension .exe et ne peuvent donc pas être exécutées depuis DOS (il semble que).

Par exemple, je veux que updatedb fonctionne tous les soirs.

Comment faire fonctionner cron?

90
demandé sur guaka 2009-04-02 00:20:49

8 réponses

Vous devez également installer {[0] } afin que vous puissiez configurer cron en tant que service windows, puis exécuter cron-config.

Si vous voulez que les travaux cron envoient un e-mail de n'importe quelle sortie, vous devrez également installer exim ou 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 extension .exe, ce sont probablement des scripts shell d'un certain type. Si vous regardez la première ligne du fichier, vous pouvez voir quel programme vous devez utiliser pour les exécuter (par exemple, " #!/bin/sh"), ainsi, vous pouvez 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".)

85
répondu Evan 2014-03-03 10:12:53

, Vous avez deux options:

  1. Installez cron en tant que service windows, en utilisant cygrunsrv:

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

    net start cron

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

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

63
répondu edoloughlin 2015-04-07 17:42:14

Astuce Chapeau http://linux.subogero.com/894/cron-on-cygwin/

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

Nous allons exécuter cron en tant que service par système utilisateur. Un système pauvre a donc besoin d'un répertoire personnel et d'un shell. Le fichier "/etc / passwd " les définira.

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

Le démarrage 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

Les utilisateurs locaux {[17] } peuvent maintenant définir leurs tâches planifiées comme ceci (crontab démarrera votre favori éditeur):

$ 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 : cela ne fonctionne pas. Cron pauvre est incapable d'exécuter des tâches planifiées pour le compte des utilisateurs de domaine sur la machine. Mais il y a un autre moyen: cron exécute également des éléments trouvés dans la table cron au niveau du système dans "/etc / crontab". Insérez donc votre suff là, de sorte que le système le fasse en son propre nom:

$ 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. Ce sont des paramètres d'environnement ou des commandes planifiées. Comme vu ci-dessus, sur Cygwin, il est préférable de créer un chemin utilisable. Home dir et shell sont normalement pris à partir de "/etc / passwd".

En ce qui concerne les colonnes des commandes planifié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
19
répondu rhoracio 2018-06-11 19:21:25

Voulais Juste ajouter que les options de cron semblent avoir changé. Besoin de passer -n plutôt que-D.

Cygrunsrv -je cron -p /usr/sbin/cron -a-n

7
répondu Reg Whitton 2011-04-28 12:52:16

A appliqué les instructions de cette réponse et cela a fonctionné Juste pour souligner une réponse plus copier-coller comme (parce que la procédure d'installation de cygwin est une sorte d'anti-copier-coller mis en œuvre)
Cliquez sur le bouton WinLogo, tapez cmd.exe, faites un clic droit dessus, choisissez "Démarrer en tant Qu'administrateur". Dans cmd invite:

 cd <directory_where_i_forgot_the setup-x86_64.exe> cygwin installer:
 set package_name=cygrunsrv cron
 setup-x86_64.exe -n -q -s http://cygwin.mirror.constant.com -P %package_name%

Assurez-vous que le programme d'installation ne lance aucune erreur dans l'invite ... Si c'est le cas - vous avez probablement des binaires cygwin en cours d'exécution ou vous n'êtes pas un Windows admin, ou certains bug bizarre ...

Maintenant cmd promt:

 C:\cygwin64\bin\cygrunsrv.exe -I cron -p /usr/sbin/cron -a -D   

Ou quel que soit le chemin de fichier complet que vous pourriez avoir sur le cygrunsrv.exe et démarrez le service cron as windows dans l'invite cmd

 net start cron

Maintenant bash terminal exécuter crontab-e

Configurez votre entrée cron un exemple ci-dessous:

        #sync my gdrive each 10th minute
    */10 * * * * /home/Yordan/sync_gdrive.sh

    # * * * * * command to be executed
    # - - - - -
    # | | | | |
    # | | | | +- - - - day of week (0 - 6) (Sunday=0)
    # | | | +- - - - - month (1 - 12)
    # | | +- - - - - - day of month (1 - 31)
    # | +- - - - - - - hour (0 - 23)
    # +--------------- minute
3
répondu Yordan Georgiev 2017-05-23 12:34:29

J'ai compris comment faire fonctionner automatiquement le service Cygwin cron lorsque je me suis connecté à Windows 7. Voici ce qui a fonctionné pour moi:

À L'aide du bloc-notes, créez le fichier C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt avec le contenu no sur la première ligne et yes sur la deuxième ligne (sans les guillemets). Ce sont vos deux réponses aux invites pour cron-config.

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

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

Ajoutez un raccourci vers ce qui suit 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 de Démarrage. BTW, vous pouvez éventuellement 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
3
répondu Jerome Fehribach 2014-08-07 15:58:34
Getting updatedb to work in cron on Cygwin -- debugging steps
1) Make sure cron is installed.
 a) Type 'cron' tab tab and look for completion help.
   You should see crontab.exe, cron-config, etc.  If not install cron using setup.
2) Run cron-config.  Be sure to read all the ways to diagnose cron.
3) Run crontab -e
 a) Create a test entry of something simple, e.g.,
   "* * * * * echo $HOME >> /tmp/mycron.log" and save it.
4) cat /tmp/mycron.log.  Does it show cron environment variable HOME
   every minute?
5) Is HOME correct?  By default mine was /home/myusername; not what I wanted.
   So, I added the entry
   "HOME='/cygdrive/c/documents and settings/myusername'" to crontab.
6) Once assured the test entry works I moved on to 'updatedb' by
   adding an entry in crontab.
7) Since updatedb is a script, errors of sed and find showed up in
   my cron.log file.  In the error line, the absolute path of sed referenced
   an old version of sed.exe and not the one in /usr/bin.  I tried changing my
   cron PATH environment variable but because it was so long crontab
   considered the (otherwise valid) change to be an error.  I tried an
   explicit much-shorter PATH command, including what I thought were the essential
   WINDOWS paths but my cron.log file was empty.  Eventually I left PATH alone and
   replaced the old sed.exe in the other path with sed.exe from /usr/bin.
   After that updatedb ran to completion.  To reduce the number of
   permission error lines I eventually ended up with this:
   "# Run updatedb at 2:10am once per day skipping Sat and Sun'
   "10 2  *  *  1-5  /usr/bin/updatedb --localpaths='/cygdrive/c' --prunepaths='/cygdrive/c/WINDOWS'"

Notes: I ran cron-config several times throughout this process
       to restart the cygwin cron daemon.
0
répondu Harry Rockefeller 2013-12-11 17:03:54

La syntaxe correcte pour installer cron dans cygwin comme un service Windows est de passer -n comme argument et pas -D:

cygrunsrv --install cron --path /usr/sbin/cron --args -n

-D retourne l'utilisation d'erreur lors du démarrage de cron dans cygwin:

$

$cygrunsrv --install cron --path /usr/sbin/cron --args -D

$cygrunsrv --démarrer cron

cygrunsrv: erreur lors du démarrage d'un service: QueryServiceStatus: erreur Win32 1062:

Le service n'a pas été démarré.

$cat /var/log/cron.log

cron: option inconnue -- D

utilisation: /usr/sbin/cron [-n] [-x [ext,sch,proc,parc de la charge,misc,test,peu]]

$

La page ci-dessous a une bonne explication.

Installation et configuration du service Cygwin Cron dans Windows: https://www.davidjnice.com/cygwin_cron_service.html

P. S., j'ai dû courir Cygwin64 Terminal sur mon Windows 10 PC en tant qu'administrateur pour installer cron en tant que service Windows.

0
répondu Shen 2018-07-29 12:05:55