¿Cómo se ejecuta un crontab en Cygwin en Windows?
(7)
Descubrí cómo hacer que el servicio cron de Cygwin se ejecute automáticamente cuando inicié sesión en Windows 7. Esto es lo que funcionó para mí:
Usando el Bloc de notas, crea el archivo C:/cygwin/bin/Cygwin_launch_crontab_service_input.txt
con el contenido no
en la primera línea y yes
en la segunda línea (sin las comillas). Estas son sus dos respuestas a las solicitudes de cron-config
.
Crea el archivo C:/cygwin/Cygwin_launch_crontab_service.bat
con contenido:
@echo off
C:
chdir C:/cygwin/bin
bash cron-config < Cygwin_launch_crontab_service_input.txt
Agregue un acceso directo a lo siguiente en la carpeta de inicio de Windows: Cygwin_launch_crontab_service.bat
Consulte http://www.sevenforums.com/tutorials/1401-startup-programs-change.html si necesita ayuda sobre cómo agregar al inicio. Por cierto, opcionalmente puede agregar estos en Inicio si desea:
Cygwin
Servidor XWin
El primero se ejecuta
C:/cygwin/Cygwin.bat
y el segundo se ejecuta
C:/cygwin/bin/run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe
Algunos comandos de cygwin son archivos .exe
, por lo que puede ejecutarlos con el programador estándar de Windows, pero otros no tienen una extensión .exe
por lo que no pueden ejecutarse desde DOS (parece).
Por ejemplo, quiero que updatedb
ejecute todas las noches.
¿Cómo hago que cron funcione?
Se aplicaron las instrucciones de esta respuesta y funcionó Solo para señalar una copia más de pegar como respuesta (porque el procedimiento de instalación de cygwin es una especie de anti-copiar-pegar implementado)
Haga clic en el botón WinLogo, escriba cmd.exe, haga clic con el botón derecho y seleccione "Comenzar como administrador". En el indicador de cmd :
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%
Asegúrese de que el instalador no arroje ningún error en el aviso ... Si lo tiene, probablemente tenga algunos binarios Cygwin en ejecución o no sea un administrador de Windows, o algún error raro ...
Ahora en cmd promt:
C:/cygwin64/bin/cygrunsrv.exe -I cron -p /usr/sbin/cron -a -D
o la ruta de archivo completa que tenga al cygrunsrv.exe e inicie el cron como servicio de Windows en el símbolo del sistema cmd
net start cron
Ahora en la terminal de bash ejecutar crontab -e
configurar su entrada cron un ejemplo a continuación:
#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
Solo quería agregar que las opciones para cron parecen haber cambiado. Necesita pasar -n en lugar de -D.
cygrunsrv -I cron -p / usr / sbin / cron -a -n
También necesita instalar cygrunsrv
para que pueda configurar cron como un servicio de Windows, luego ejecute cron-config
.
Si desea que las tareas cron envíen correos electrónicos de cualquier resultado, también deberá instalar exim
o ssmtp
(antes de ejecutar cron-config
).
Consulte /usr/share/doc/Cygwin/cron-*.README
para obtener más detalles.
En cuanto a los programas sin extensión .exe
, probablemente sean scripts de shell de algún tipo. Si observa la primera línea del archivo, puede ver qué programa necesita usar para ejecutarlos (por ejemplo, " #!/bin/sh
"), por lo que podría ejecutarlos desde el programador de Windows llamando al programa shell (por ejemplo, " C:/cygwin/bin/sh.exe -l /my/cygwin/path/to/prog
".)
Tienes dos opciones:
Instala cron como un servicio de Windows, usando cygrunsrv:
cygrunsrv -I cron -p /usr/sbin/cron -a -D
net start cron
Los archivos ''no .exe'' son probablemente scripts bash, por lo que puede ejecutarlos a través del programador de Windows invocando bash para ejecutar el script, por ejemplo:
C:/cygwin/bin/bash.exe -l -c "./full-path/to/script.sh"
punta del sombrero http://linux.subogero.com/894/cron-on-cygwin/
Inicie cygwin-setup y agregue el paquete "cron" de la categoría "Admin".
Ejecutaremos cron como un servicio por el usuario SYSTEM. Pobre SYSTEM necesita un directorio de inicio y un shell. El archivo "/ etc / passwd" los definirá.
$ mkdir /root
$ chown SYSTEM:root /root
$ mcedit /etc/passwd
SYSTEM:*:......:/root:/bin/bash
El comienzo del servicio:
$ 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
Los usuarios locales ahora pueden definir sus tareas programadas de esta manera (crontab iniciará su editor favorito):
$ crontab -e # edit your user specific cron-table HOME=/home/foo
PATH=/usr/local/bin:/usr/bin:/bin:$PATH
# testing
* * * * * touch ~/cron @reboot ~/foo.sh 45 11 * * * ~/lunch_message_to_mates.sh
Usuarios del dominio : no funciona. El cron pobre no puede ejecutar tareas programadas en nombre de los usuarios del dominio en la máquina. Pero hay otra forma: cron también ejecuta cosas encontradas en la tabla cron del nivel del sistema en "/ etc / crontab". Entonces inserta tu suf allí, para que SYSTEM lo haga en su propio nombre:
$ 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 algunas palabras sobre las entradas de crontab. Son configuraciones de entorno o comandos programados. Como se vio anteriormente, en Cygwin es mejor crear una RUTA utilizable. El dir y el shell de inicio normalmente se toman de "/ etc / passwd".
En cuanto a las columnas de comandos programados, consulte la página del manual.
Si ciertas entradas de crontab no se ejecutan, la mejor herramienta de diagnóstico es esta:
$ cronevents
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.