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

use*_*306 97 windows cron cygwin crontab

一些cygwin命令是.exe文件,因此您可以使用标准Windows Scheduler运行它们,但是其他没有.exe扩展名,因此无法从DOS运行(看起来像).

比如我想updatedb每晚跑步.

我如何让cron工作?

Eva*_*van 90

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

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

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

关于没有.exe扩展名的程序,它们可能是某种类型的shell脚本.如果查看文件的第一行,您可以看到运行它们需要使用哪个程序(例如" #!/bin/sh"),因此您可以通过调用shell程序(例如" ")从Windows调度程序执行它们C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog. )

  • 提示:使用`cronevents` 命令查看事件(来自windows Evengs 日志)。它们永远不会被丢弃,我会每隔几个月修剪一次原木。 (2认同)

edo*_*lin 71

您有两种选择:

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

    __CODE__

    __CODE__

  2. "非.exe"文件可能是bash脚本,因此您可以通过调用bash来运行脚本,通过Windows调度程序运行它们,例如:

    __CODE__

  • 顺便说一句,我需要将路径指定为unix样式的路径 - 对于updateb我使用windows任务调度程序调度的整个命令看起来像...... c:\ cygwin\bin\bash.exe -l -c"/ usr/bin/updatedb的" (4认同)
  • 我特别喜欢bash.exe方法.谢谢. (3认同)
  • 我绝对推荐这个答案中的方法.我能够在Windows 7上使用C:\ cygwin\bin\bash.exe -l -c"C:\ full-path\to\script.sh". (2认同)
  • 如果这不起作用你可能想要用-n替换-D:cygrunsrv -I cron -p/usr/sbin/cron -a -D (2认同)
  • 我使用cygrunsrv v1.62并且'-D'不是有效选项,因此服务在启动后立即退出.应使用'-n'而不是'-D'来防止服务自行退出. (2认同)
  • 如果正在运行脚本,那么使用`-l`选项(登录shell)有什么意义?脚本通常由非登录,非交互的shell运行-这样的shell不提供`/ etc / profile`,`〜/ .bash_profile`,`〜/ .bashrc`的内容,这对脚本没有任何意义。-c选项也是不必要的,它用于指定命令,脚本只是一个文件,可以直接馈入bash。因此,它变成`C:\ cygwin \ bin \ bash.exe“ ./path/to/script.sh”`。 (2认同)

小智 22

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

启动cygwin-setup并从"Admin"类别添加"cron"包.

我们将用户SYSTEM将cron作为服务运行.因此,糟糕的SYSTEM需要一个主目录和一个shell."/ etc/passwd"文件将定义它们.

$ mkdir /root
$ chown SYSTEM:root /root
$ mcedit /etc/passwd
SYSTEM:*:......:/root:/bin/bash
Run Code Online (Sandbox Code Playgroud)

启动服务:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

域用户:它不起作用.可怜的cron无法代表计算机上的域用户运行计划任务.但还有另外一种方法:cron还运行在"/ etc/crontab"系统级cron表中找到的东西.所以在那里插入你的后缀,以便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*
Run Code Online (Sandbox Code Playgroud)

最后关于crontab条目的几句话.它们是环境设置或预定命令.如上所示,在Cygwin上,最好创建一个可用的PATH.Home dir和shell通常取自"/ etc/passwd".

有关预定命令的列,请参见手册页.

如果某些crontab条目没有运行,最好的诊断工具是:

$ cronevents
Run Code Online (Sandbox Code Playgroud)


小智 7

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

cygrunsrv -I cron -p /usr/sbin/cron -a -n
Run Code Online (Sandbox Code Playgroud)