104

一部の cygwin コマンドは.exeファイルであるため、標準の Windows スケジューラで実行できますが、.exe拡張子がないため DOS から実行できないものもあります (そのようです)。

たとえば、updatedb毎晩走りたいとします。

cron を機能させるにはどうすればよいですか?

4

8 に答える 8

95

cygrunsrvcronをWindowsサービスとして設定できるようにインストールしてから、を実行する必要もありますcron-config

eximcronジョブで出力の電子メールを送信する場合は、またはssmtp(実行する前に)のいずれかをインストールする必要がありますcron-config

詳細については、を参照/usr/share/doc/Cygwin/cron-*.READMEしてください。

拡張機能のないプログラムに関して.exeは、おそらく何らかのタイプのシェルスクリプトです。ファイルの最初の行を見ると、それらを実行するために使用する必要のあるプログラム(たとえば、 " #!/bin/sh")がわかります。したがって、シェルプログラム(たとえば、 ""を呼び出すことにより、Windowsスケジューラからそれらを実行できますC:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog。 )。

于 2009-04-01T20:33:02.303 に答える
76

2つのオプションがあります。

  1. cygrunsrvを使用して、cronをWindowsサービスとしてインストールします。

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

    (非常に)古いバージョンのcronでは、-nの代わりに-Dを使用する必要があることに注意してください。

  2. 'non .exe'ファイルはおそらくbashスクリプトであるため、bashを呼び出してスクリプトを実行することにより、Windowsスケジューラを介してファイルを実行できます。例:

    C:\cygwin\bin\bash.exe -l -c "./full-path/to/script.sh"
    
于 2009-04-01T20:34:27.840 に答える
25

帽子のヒントhttp://linux.subogero.com/894/cron-on-cygwin/

cygwin-setup を起動し、「管理者」カテゴリから「cron」パッケージを追加します。

ユーザー SYSTEM によってサービスとして cron を実行します。したがって、貧弱な SYSTEM にはホーム ディレクトリとシェルが必要です。「/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 - one per line
* * * * *   touch ~/cron
@reboot     ~/foo.sh
45 11 * * * ~/lunch_message_to_mates.sh

ドメイン ユーザー: 機能しません。貧弱な 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*

最後に、crontab エントリについて少し説明します。これらは、環境設定またはスケジュールされたコマンドのいずれかです。上記のように、Cygwin では使用可能な PATH を作成するのが最善です。ホームディレクトリとシェルは、通常「/etc/passwd」から取得されます。

スケジュールされたコマンドの列については、マニュアル ページを参照してください。

特定の crontab エントリが実行されない場合、最適な診断ツールは次のとおりです。

$ cronevents
于 2011-10-26T08:10:53.797 に答える
8

cron のオプションが変更されたように見えることを追加したかっただけです。-D ではなく -n を渡す必要があります。

cygrunsrv -I cron -p /usr/sbin/cron -a -n
于 2011-04-28T12:52:16.333 に答える
3

Windows 7 にログオンしたときに Cygwin cron サービスを自動的に実行する方法を見つけました。

メモ帳を使用して、1 行目と2 行目C:\cygwin\bin\Cygwin_launch_crontab_service_input.txtにコンテンツを含むファイルを作成します(引用符なし)。これらは、 のプロンプトに対する 2 つの応答です。noyescron-config

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を参照してください。ところで、必要に応じて、オプションでこれらをスタートアップに追加できます。

シグウィン

XWin サーバー

最初のものは実行します

C:\cygwin\Cygwin.bat

そして2番目のものは実行されます

C:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe
于 2011-11-04T19:26:12.767 に答える
3

この回答の指示を適用すると、うまくいきました。回答のようなコピーペーストを指摘するだけです(cygwinのインストール手順は、コピーと貼り付けを防止する方法で実装されているため)
WinLogoボタンをクリックし、cmd.exeと入力し、右クリックして「管理者として開始」。コマンドプロンプトで:

 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バイナリが実行されているか、Windows管理者ではないか、または奇妙なバグです...

コマンドプロンプトで:

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

または、cygrunsrv.exe への完全なファイル パスを入力し、cmd プロンプトで Windows サービスとして cron を開始します。

 net start cron

bashターミナルで 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
于 2014-03-20T08:36:37.897 に答える