Come si esegue un crontab in Cygwin su Windows?

Alcuni comandi di cygwin sono file .exe , quindi puoi eseguirli con lo Scheduler di Windows standard, ma altri non hanno un’estensione .exe quindi non possono essere eseguiti da DOS (sembra).

Ad esempio, voglio che updatedb funzioni di notte.

Come faccio a far funzionare cron?

È inoltre necessario installare cygrunsrv modo da poter impostare cron come servizio Windows, quindi eseguire cron-config .

Se si desidera che i lavori di cron inviino l’e-mail di qualsiasi output, è necessario installare anche exim o ssmtp (prima di eseguire cron-config ).

Vedi /usr/share/doc/Cygwin/cron-*.README per maggiori dettagli.

Per quanto riguarda i programmi senza estensione .exe , sono probabilmente script di shell di qualche tipo. Se guardi la prima riga del file puoi vedere quale programma devi usare per eseguirli (ad esempio, ” #!/bin/sh “), quindi potresti forse eseguirli dallo scheduler di Windows chiamando il programma shell (ad es. ” C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog “.)

Hai due opzioni:

  1. Installa cron come servizio Windows, usando cygrunsrv:

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

    net start cron

  2. I file ‘non .exe’ sono probabilmente script di bash, quindi puoi eseguirli tramite lo scheduler di Windows invocando bash per eseguire lo script, ad esempio:

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

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

Avvia Cygwin-setup e aggiungi il pacchetto “cron” dalla categoria “Admin”.

Eseguiremo cron come un servizio per utente SYSTEM. Poor SYSTEM necessita quindi di una home directory e di una shell. Il file “/ etc / passwd” li definirà.

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

Inizia il servizio:

 $ 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 

Gli utenti locali ora possono definire le loro attività pianificate come questa (crontab avvierà il tuo editor preferito):

 $ 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 

Utenti del dominio : non funziona. Scarsa cron non è in grado di eseguire attività pianificate per conto degli utenti del dominio sulla macchina. Ma c’è un altro modo: cron esegue anche le informazioni trovate nella tabella cron a livello di sistema in “/ etc / crontab”. Quindi inserisci qui il tuo suff, in modo che SYSTEM lo faccia per proprio conto:

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

Finalmente qualche parola sulle voci di crontab. Sono impostazioni dell’ambiente o comandi programmati. Come visto sopra, su Cygwin è meglio creare un PERCORSO utilizzabile. Home dir e shell sono normalmente presi da “/ etc / passwd”.

Per quanto riguarda le colonne dei comandi programmati, consultare la pagina di manuale.

Se alcune voci di crontab non vengono eseguite, lo strumento diagnostico migliore è questo:

 $ cronevents 

Volevo solo aggiungere che le opzioni di cron sembrano essere cambiate. Bisogno di passare -n piuttosto che -D.

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

Ha applicato le istruzioni di questa risposta e ha funzionato solo per indicare una copia più incolla come risposta (perché la procedura di installazione di cygwin è una specie di implementazione anti-copia-incolla)
Fai clic sul pulsante WinLogo, digita cmd.exe, fai clic con il pulsante destro del mouse, scegli “Avvia come amministratore”. Nel prompt di cmd :

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

Assicurati che il programma di installazione non presenti errori nel prompt … Se lo è, probabilmente hai alcuni binari di cygwin in esecuzione o non sei un amministratore di Windows, o qualche bizzarro bug …

Ora in cmd promt:

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

o qualsiasi altro percorso di file completo che potresti avere con cygrunsrv.exe e avviare il cron come servizio Windows nel prompt di cmd

  net start cron 

Ora nel terminale bash eseguire crontab -e

imposta la voce di cron un esempio qui sotto:

  #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 

Ho capito come far funzionare automaticamente il servizio cron di Cygwin quando ho effettuato l’accesso a Windows 7. Ecco cosa ha funzionato per me:

Utilizzando Blocco note, creare il file C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt con il contenuto no sulla prima riga e yes sulla seconda riga (senza virgolette). Queste sono le tue due risposte ai prompt di cron-config .

Crea il file C:\cygwin\Cygwin_launch_crontab_service.bat con il contenuto:

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

Aggiungi un collegamento a quanto segue nella cartella Esecuzione automatica di Windows: Cygwin_launch_crontab_service.bat

Vedi http://www.sevenforums.com/tutorials/1401-startup-programs-change.html se hai bisogno di aiuto su come aggiungere all'avvio. A proposito, puoi opzionalmente aggiungerli all'avvio se desideri:

Cygwin

XWin Server

Il primo viene eseguito

 C:\cygwin\Cygwin.bat 

e il secondo esegue

 C:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe 
 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, eg, "* * * * * 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. 

La syntax corretta per installare cron in cygwin come servizio di Windows è passare -n come argomento e non -D :

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

-D restituisce errore di utilizzo all’avvio di cron in cygwin:

$

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

$ cygrunsrv –start cron

cygrunsrv: Errore durante l’avvio di un servizio: QueryServiceStatus: Win32 error 1062:

Il servizio non è stato avviato.

$ cat /var/log/cron.log

cron: opzione sconosciuta – D

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

$

La pagina seguente ha una buona spiegazione.

Installazione e configurazione del servizio Cygwin Cron in Windows: https://www.davidjnice.com/cygwin_cron_service.html

PS Ho dovuto eseguire Cygwin64 Terminal sul mio PC Windows 10 come amministratore per installare cron come servizio Windows.