Domanda

Alcuni comandi Cygwin sono file .exe, in modo da poterli correre con la pianificazione di Windows standard, ma altri non hanno un'estensione .exe quindi non può essere eseguito da DOS (sembra).

Ad esempio voglio updatedb per eseguire ogni notte.

Come faccio a fare il lavoro cron?

È stato utile?

Soluzione

È necessario installare anche cygrunsrv in modo da poter impostare cron come un servizio di Windows, quindi eseguire cron-config.

Se si desidera che i posti di lavoro cron per inviare e-mail di qualsiasi output avrete anche bisogno di installare uno o exim ssmtp (prima di eseguire cron-config.)

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

Per quanto riguarda i programmi senza un'estensione .exe, sono probabilmente gli script di shell di un certo tipo. Se si guarda alla prima riga del file si poteva vedere quale programma è necessario utilizzare per farli funzionare (ad esempio, "#!/bin/sh"), così si potrebbe forse eseguirli dal programmatore finestre chiamando il programma di shell (per esempio, "C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog ".)

Altri suggerimenti

Sono disponibili due opzioni:

  1. Installa cron come servizio di Windows, utilizzando cygrunsrv:

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

    Si noti, a (molto) le vecchie versioni di cron è necessario utilizzare -D invece di -n

  2. I file '.exe' non sono probabilmente script bash, in modo da poterli eseguire tramite l'utilità di pianificazione di Windows invocando bash per eseguire lo script, per esempio:.

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

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

Avviare il cygwin-setup e aggiungere il pacchetto “cron” dalla categoria “Admin”.

Faremo cron come un servizio da SYSTEM utente. Povero sistema necessita quindi una home directory e un guscio. Il file “/ etc / passwd” li definirà.

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

La avviare 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 può ora definire le loro operazioni pianificate come questo (crontab inizierà il vostro 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 Dominio : non funziona. Povero cron è in grado di eseguire le operazioni pianificate per conto di utenti di dominio sulla macchina. Ma c'è un altro modo: cron gestisce anche roba trovata nella tabella cron livello di sistema in “/ etc / crontab”. Quindi, inserire il suff lì, in modo che il sistema lo fa 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*

Infine due parole su. Crontab Essi sono sia le impostazioni di ambiente o comandi pianificati. Come visto in precedenza, il Cygwin è meglio creare un percorso utilizzabile. Inizio dir e Shell sono normalmente presi da “/ etc / passwd”.

Per quanto riguarda le colonne di comandi pianificati vedono la pagina di manuale.

Se alcune voci di crontab non vengono eseguiti, il miglior strumento diagnostico è questa:

$ cronevents

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

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

applicato le istruzioni da questa risposta e ha funzionato Giusto per sottolineare un altro copia incolla come risposta (perché cygwin procedura di installazione è una specie di anti-copia-incolla saggio implementato)
Fare clic sul pulsante WinLogo, digitare cmd.exe, fare clic destro, scegliere "Avvia come amministratore". In cmd di richiesta:

 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%

Assicurarsi che il programma di installazione non gettare eventuali errori nel prompt ... Se ha - probabilmente avete alcuni binari per Cygwin in esecuzione o non sei un amministratore di Windows, o qualche bug Freaky ...

Ora, in cmd promt:

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

o qualsiasi percorso completo del file potrebbe essere necessario il cygrunsrv.exe e avviare il cron come servizio di Windows nel prompt cmd

 net start cron

Ora, in bash run terminale      crontab -e

impostare si cron voce di un esempio 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 ottenere il servizio cron Cygwin in esecuzione automaticamente quando mi sono collegato a Windows 7. Ecco cosa ha funzionato per me:

Utilizzando Blocco note, creare C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt file con no contenuti sulla prima linea e yes sulla seconda linea (senza le virgolette). Questi sono i tuoi due risposte ai prompt per cron-config.

Crea C:\cygwin\Cygwin_launch_crontab_service.bat file con contenuti:

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

aggiungere un collegamento al seguente nella cartella di avvio di Windows: Cygwin_launch_crontab_service.bat

http://www.sevenforums.com/tutorials/1401 -startup-programmi-change.html se hai bisogno di aiuto su come aggiungere alla Startup. A proposito, è possibile scegliere di aggiungere questi in avvio se si desidera:

Cygwin

XWin Server

Il primo esegue

C:\cygwin\Cygwin.bat

e la seconda esegue

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

La sintassi corretta per installare cron in Cygwin come servizio di Windows è quello di passare -n come argomento e non -D :

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

-D restituisce errore di utilizzo quando si avvia cron in Cygwin:

$

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

$ cygrunsrv --start cron

cygrunsrv: Errore di iniziare un servizio: QueryServiceStatus: errore Win32 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, carico, diverse, di prova, bit]]

$

Qui di seguito la pagina ha una buona spiegazione.

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

PS Ho dovuto correre Cygwin64 Terminal sul mio 10 PC Windows come amministratore per poter installare cron come servizio di 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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top