Come si esegue un crontab in Cygwin su Windows?
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?
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:
-
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
-
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.