いくつかのcygwinコマンドは.exe
ファイル。標準のWindowsスケジューラで実行できますが、他のファイルには.exe
拡張子なので、DOSから実行できません(どうやらそうです)。
たとえば、updatedb
を毎晩実行したい。
Cronを機能させるにはどうすればよいですか?
CronをWindowsサービスとして設定し、cron-config
を実行できるように、cygrunsrv
もインストールする必要があります。
Cronジョブで出力の電子メールを送信する場合は、exim
またはssmtp
をインストールする必要があります(cron-config
を実行する前に)
詳細については、/usr/share/doc/Cygwin/cron-*.README
を参照してください。
.exe
拡張子のないプログラムに関しては、おそらく何らかのタイプのシェルスクリプトです。ファイルの最初の行を見ると、それらを実行するために使用する必要があるプログラム(たとえば、「#!/bin/sh
」)が表示されるので、Shellプログラムを呼び出してWindowsスケジューラから実行できます(例:「C:\cygwin\bin\sh.exe -l /my/cygwin/path/to/prog
」。)
次の2つのオプションがあります。
Cygrunsrvを使用して、cronをWindowsサービスとしてインストールします。
cygrunsrv -I cron -p /usr/sbin/cron -a -n
net start cron
Cronの(非常に)古いバージョンでは、-nの代わりに-Dを使用する必要があることに注意してください。
「非.exe」ファイルはおそらくbashスクリプトであるため、bashを呼び出してスクリプトを実行することにより、Windowsスケジューラを介して実行できます。
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をサービスとして実行します。したがって、貧しいシステムには、ホームディレクトリとシェルが必要です。 「/ 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テーブルにあるものも実行します。そこで、suffをそこに挿入して、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
Cronのオプションが変更されたように見えることを追加したかっただけです。 -Dではなく-nを渡す必要があります。
cygrunsrv -I cron -p /usr/sbin/cron -a -n
Windows 7にログオンしたときにCygwinのcronサービスを自動的に実行する方法を見つけました。
メモ帳を使用して、ファイルC:\cygwin\bin\Cygwin_launch_crontab_service_input.txt
を作成し、最初の行にコンテンツno
を、2行目にyes
を付けます(引用符なし)。これらは、cron-config
のプロンプトに対する2つの応答です。
コンテンツを含むファイル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
この回答 からの指示を適用し、回答のようなコピーペーストを指摘するだけで機能しました(cygwinインストール手順は、コピー防止貼り付けのように実装されているため)
WinLogoボタンをクリックし、cmd.exeと入力して右クリックし、「管理者として起動」を選択します。 Incmdプロンプト:
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の管理者ではないか、または奇妙なバグです...
次に、cmdpromt:
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
インストールする正しい構文cron Windowsサービスとしてのcygwinでは-n引数ではなく-D:
cygrunsrv --install cron --path/usr/sbin/cron --args -n
-D起動時に使用法エラーを返しますcron in cygwin:
$
$ cygrunsrv --install cron --path/usr/sbin/cron --args -D
$ cygrunsrv --start cron
cygrunsrv:サービスの開始エラー:QueryServiceStatus:Win32エラー1062:
サービスは開始されていません。
$ cat /var/log/cron.log
cron:不明なオプション-D
使用法:/ usr/sbin/cron [-n] [-x [ext、sch、proc、parc、load、misc、test、bit]]
$
以下のページに説明があります。
WindowsでのCygwin Cronサービスのインストールと設定: https://www.davidjnice.com/cygwin_cron_service.html
PS実行する必要がありましたCygwin64 Terminalインストールする管理者としてWindows 10 PCでcron 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.