如何在Windows上运行Cygwin中的crontab?

一些cygwin命令是.exe文件,所以你可以使用标准的Windows Scheduler来运行它们,但是其他的没有.exe扩展名,所以不能在DOS下运行(看起来像)。

例如,我希望updatedb每晚运行。

我如何使cron工作?

您还需要安装cygrunsrv以便您可以将cron设置为Windows服务,然后运行cron-config

如果您希望cron作业发送任何输出的电子邮件,则还需要安装eximssmtp (在运行cron-config之前)。

有关更多详细信息,请参阅/usr/share/doc/Cygwin/cron-*.README

关于不带.exe扩展名的程序,它们可能是某种types的shell脚本。 如果你看看文件的第一行,你可以看到你需要使用什么程序来运行它们(例如,“ #!/bin/sh ”),所以你可以通过调用shell程序(例如“ C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog ”)。

你有两个select:

  1. 使用cygrunsrv安装cron作为Windows服务:

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

    net start cron

  2. “非.exe”文件可能是bash脚本,所以你可以通过调用bash来运行脚本来运行它们,例如:

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

帽子提示http://linux.subogero.com/894/cron-on-cygwin/

启动cygwin-setup并从“Admin”类别添加“cron”包。

我们将通过用户SYSTEM运行cron作为服务。 因此,较差的系统需要一个主目录和一个shell。 “/ etc / passwd”文件将定义它们。

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

开始服务:

 $ 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 

本地用户现在可以像这样定义他们的计划任务(crontab将启动你最喜欢的编辑器):

 $ 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 

域用户 :它不起作用。 可怜的cron无法代表机器上的域用户运行计划任务。 但还有另一种方式:cron也运行在“/ etc / crontab”中的系统级cron表中find的东西。 因此,在那里插入你的文件,以便SYSTEM代表它自己:

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

最后几个关于crontab条目的文字。 它们是环境设置或预定的命令。 如上所示,在Cygwin上最好创build一个可用的PATH。 主目录和shell通常从“/ etc / passwd”中获取。

至于预定命令的列,请参阅手册页。

如果某些crontab项不运行,最好的诊断工具是:

 $ cronevents 

只是想补充一点,cron的选项似乎已经改变了。 需要传递-n而不是-D。

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

应用从这个答案的指示,它的工作只是指出一个复制粘贴像答案(因为cygwin安装过程是一种反复制粘贴智能实施)
单击WinLogobutton,键入cmd.exe,右键单击它,select“以pipe理员身份启动”。 在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% 

确保安装程序不会在提示中抛出任何错误…如果它有 – 你可能有一些cygwin二进制文件正在运行,或者你不是Windowspipe理员,或一些奇怪的错误…

现在在cmd promt:

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

或者任何完整的文件path,你可能要cygrunsrv.exe,并启动cron作为cmd提示符下的Windows服务

  net start cron 

现在在bashterminal运行crontab -e

设置你的cron入口示例如下:

  #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 

我想出了如何在login到Windows 7时自动运行Cygwin cron服务。以下是我的工作原理:

使用记事本,在第一行创build文件C:\cygwin\bin\Cygwin_launch_crontab_service_input.txt ,其第二行的内容为no (不带引号)。 这是你的两个提示cron-config回应。

用内容创build文件C:\cygwin\Cygwin_launch_crontab_service.bat

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

在Windows启动文件夹中添加一个快捷方式到以下内容: Cygwin_launch_crontab_service.bat

如果您需要关于如何添加到启动的帮助,请参阅http://www.sevenforums.com/tutorials/1401-startup-programs-change.html 。 顺便说一句,你可以select添加这些启动如果你想:

Cygwin的

XWin服务器

第一个执行

 C:\cygwin\Cygwin.bat 

第二个执行

 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.