Hvordan kører du en crontab i Cygwin på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Nogle cygwin-kommandoer er .exe filer, så du kan køre dem med standard Windows Scheduler, men andre har ikke en .exe udvidelse, så det kan ikke køres fra DOS (det ser ud til).


For eksempel vil jeg updatedb køre om natten.


Hvordan laver jeg cron arbejde?

Bedste reference


Du skal også installere cygrunsrv, så du kan indstille cron som en windows-tjeneste og derefter køre cron-config.


Hvis du vil have cron-job til at sende e-mail til en output, skal du også installere enten exim eller ssmtp (før du kører cron-config.)


Se /usr/share/doc/Cygwin/cron-*.README for flere detaljer.


Hvad angår programmer uden en .exe udvidelse, er de nok scripts af en eller anden type. Hvis du ser på den første linje i filen, kan du se hvilket program du skal bruge til at køre dem (f.eks. '#!/bin/sh'), så du kan måske udføre dem fra Windows-planlæggeren ved at kalde shell-programmet ( fx 'C:cygwininsh.exe -l /my/cygwin/path/to/prog'.)

Andre referencer 1


Du har to muligheder:



  1. Installer cron som en windows-tjeneste ved hjælp af cygrunsrv:



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

      
      net start cron


  2. Filerne 'non .exe' er sandsynligvis bash-scripts, så du kan køre dem via windows scheduler ved at påberåbe bash for at køre scriptet, f.eks .:



      C:cygwininash.exe -l -c "./full-path/to/script.sh"



Andre referencer 2


hat tip http://linux.subogero.com/894/cron-on-cygwin/[35]


Start cygwin-opsætningen og tilføj 'cron' pakken fra 'Admin' kategorien.


Vi kører cron som en tjeneste af bruger SYSTEM. Dårlig SYSTEM har derfor brug for en hjemmekatalog og en skal. Filen '/etc/passwd' vil definere dem.


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


Start tjenesten:


$ 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


Lokale brugere kan nu definere deres planlagte opgaver som dette (crontab vil starte dit yndlingsredaktø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


Domænebrugere : Det virker ikke. Dårlig cron kan ikke køre planlagte opgaver på vegne af domænebrugere på maskinen. Men der er en anden måde: cron kører også ting fundet i systemniveau cron tabellen i '/etc/crontab'. Så indsæt dit suff der, så SYSTEM gør det på egne vegne:


$ 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*


Endelig et par ord om crontab poster. De er enten miljøindstillinger eller planlagte kommandoer. Som set ovenfor er det bedst at skabe en brugbar PATH på Cygwin. Home dir og shell er normalt taget fra '/etc/passwd'.


Hvad angår kolonnerne for planlagte kommandoer, se den manuelle side.


Hvis visse crontab-indgange ikke løber, er det bedste diagnostiske værktøj dette:


$ cronevents

Andre referencer 3


Ville blot tilføje at mulighederne for cron synes at have ændret sig. Skal passere -n heller end -D.



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


Andre referencer 4


Anvendte instruktionerne fra dette svar, og det fungerede
Bare for at påpege en mere kopi pasta som svar (fordi cygwin installationsprocedure er slags anti-copy-paste wise implementeret)

Klik på WinLogo-knappen, skriv cmd.exe, højreklik på den, vælg 'Start som administrator'. I cmd -prompt:


 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\%


Sørg for, at installationsprogrammet ikke smider nogen fejl i promptet ... Hvis det har - har du sikkert nogle cygwin-binære filer, eller du er ikke en Windows-administrator eller noget freaky bug ...


Nu i cmd promt:


 C:cygwin64incygrunsrv.exe -I cron -p /usr/sbin/cron -a -D   


eller hvad som helst den fulde filsti, du måtte have til cygrunsrv.exe og
start cron som windows service i cmd prompt


 net start cron


Nu i bash terminalkørsel
     crontab -e


konfigurere dig cron entry et eksempel bellow:


        #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

Andre referencer 5


Jeg regnede med, hvordan Cygwin Cron-tjenesten kører automatisk, da jeg logger på Windows 7. Her er hvad der fungerede for mig:


Brug Notesblok, lav fil C:cygwininCygwin\_launch\_crontab\_service\_input.txt med indhold no på første linie og yes på anden linje (uden citater). Dette er dine to svar på beskeder til cron-config.


Opret fil C:cygwinCygwin\_launch\_crontab\_service.bat med indhold:


@echo off
C:
chdir C:cygwinin
bash  cron-config < Cygwin\_launch\_crontab\_service\_input.txt


Tilføj en genvej til følgende i Windows Startup-mappen:
Cygwin\_launch\_crontab\_service.bat


Se http://www.sevenforums.com/tutorials/1401-startup-programs-change.html hvis du har brug for hjælp til, hvordan du tilføjer til opstart. BTW, kan du eventuelt tilføje disse i Startup, hvis du vil: [37]


Cygwin


XWin Server


Den første udfører


C:cygwinCygwin.bat


og den anden udfører


C:cygwinin
un.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe

Andre referencer 6


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.

Andre referencer 7


Den korrekte syntaks for at installere cron i cygwin som Windows-tjenesten skal passere -n som argument og ikke -D :


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


-D returnerer brugerfejl, når du starter cron i cygwin:


$


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


$ cygrunsrv - start cron


cygrunsrv: Fejl ved at starte en tjeneste: QueryServiceStatus: Win32 error 1062:


Tjenesten er ikke startet.


$ cat/var/log/cron.log


cron: ukendt indstilling - D


brug:/usr/sbin/cron [[-n]] [[-x [[ext, sch, proc, parc, load, misc, test, bit]]


$


Nedenstående side har en god forklaring.


Installation & Konfiguration af Cygwin Cron-tjenesten i Windows:
https://www.davidjnice.com/cygwin\_cron\_service.html[38]


PS Jeg måtte køre Cygwin64 Terminal på min Windows 10-pc som administrator for at installere cron som Windows-tjeneste.