Certaines commandes cygwin sont .exe
fichiers, vous pouvez donc les exécuter avec le planificateur Windows standard, mais d’autres n’ont pas de fichier .exe
extension donc ne peut pas être exécuté à partir de DOS (il semble que).
Par exemple, je veux que updatedb
s'exécute de nuit.
Comment puis-je faire fonctionner cron?
Vous devez également installer cygrunsrv
pour pouvoir configurer cron en tant que service Windows, puis exécutez cron-config
.
Si vous souhaitez que les tâches cron envoient un courrier électronique de n'importe quelle sortie, vous devez é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 .exe
_ extension, il s’agit probablement de scripts Shell. 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 pouvez donc 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
".)
Vous avez deux options:
Installez cron en tant que service Windows, en utilisant cygrunsrv:
cygrunsrv -I cron -p /usr/sbin/cron -a -n
net start cron
Notez que dans les (très) anciennes versions de cron, vous devez utiliser -D au lieu de -n
Les fichiers "non .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"
pointe du chapeau http://linux.subogero.com/894/cron-on-cygwin/
Lancez 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. Un système médiocre 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é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
Les utilisateurs locaux peuvent maintenant définir leurs tâches planifiées comme ceci (crontab lancera votre éditeur favori):
$ 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. Un mauvais cron ne peut pas exécuter de tâches planifiées pour le compte d'utilisateurs du domaine sur la machine. Mais il existe un autre moyen: cron exécute également les éléments trouvés dans la table cron au niveau du système dans "/ etc/crontab". Donc insérez votre suffixe ici, pour que SYSTEM 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 de crontab. Il s’agit de paramètres d’environnement ou de commandes planifiées. Comme on l’a vu plus haut, sur Cygwin, il est préférable de créer un PATH utilisable. Les répertoires Home et Shell sont normalement extraits de “/ etc/passwd”.
En ce qui concerne les colonnes des commandes planifiées, voir la page de manuel.
Si certaines entrées de crontab ne s'exécutent pas, le meilleur outil de diagnostic est le suivant:
$ cronevents
Je voulais juste ajouter que les options de cron semblent avoir changé. Besoin de passer -n plutôt que -D.
cygrunsrv -I cron -p /usr/sbin/cron -a -n
J'ai compris comment faire fonctionner le service Cygwin cron automatiquement lorsque je me connectais à 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 contenu:
@echo off
C:
chdir C:\cygwin\bin
bash cron-config < Cygwin_launch_crontab_service_input.txt
Ajoutez un raccourci aux é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 pour savoir comment l'ajouter à Startup. BTW, vous pouvez éventuellement les ajouter dans Startup si vous 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
Appliqué les instructions de cette réponse et cela fonctionna Juste pour indiquer un plus de copier/coller comme réponse (car 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, cliquez dessus avec le bouton droit de la souris, 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 génère aucune erreur dans l'invite ... Si tel est le cas - vous avez probablement des fichiers binaires cygwin en cours d'exécution ou vous n'êtes pas un administrateur Windows, ou un bug anormal ...
Maintenant dans cmd promt:
C:\cygwin64\bin\cygrunsrv.exe -I cron -p /usr/sbin/cron -a -D
ou le chemin d'accès complet au fichier cygrunsrv.exe et démarrez le cron en tant que service Windows dans l'invite de commande
net start cron
Maintenant en bash terminal lance crontab -e
configurez vous cron entry 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
La syntaxe correcte à installer cron dans cygwin en tant que service Windows doit être passée n comme argument et non D:
cygrunsrv --install cron --path/usr/sbin/cron --args - n
D renvoie une erreur d'utilisation lors du démarrage de cron en cygwin:
$
$ cygrunsrv --install cron --path/usr/sbin/cron --args - D
$ cygrunsrv --start 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, charge, misc, test, bit]]
$
La page ci-dessous a une bonne explication.
Installation et configuration du service Cygwin Cron sous Windows: https://www.davidjnice.com/cygwin_cron_service.html
PS Je devais exécuter Cygwin64 Terminal sur mon PC Windows 10 en tant qu'administrateur afin d'installer cron en tant que service Windows.
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.