本記事では、Windows 10でWindows Subsystem for Linuxなどの機能を使用せず、
Windows 10のデフォルト機能しか使用しない前提の話です。
あくまでも個人的なメモ程度ですが、ご参加になれば幸いです。
環境
- Windows 10 Pro 1903
- XAMPP(PHP5.6)
- XAMPP(PHP7.3)
やり方
- 実行したいコマンドをbatファイルとして作成
- そのbatファイルをバックグラウンドで実行するためにvbsファイルを用意
- 上記vbsファイルを定期実行するためにWindowsのタスクスケジューラを設定
詳細
Windows上のXAMPP環境で開発を行っているため、時々サーバー上のようにバッチ処理を行いたいが、
Windows標準機能ではLinuxのcrontab機能がないため、それっぽく定期的に定期実行をする方法を考えました。
実行例
C:\crontest\addTime.php
<?php
require 'vendor/autoload.php';
use Carbon\Carbon;
// time.txtに現在時刻を追記する
$textfile = 'C:\crontest\time.txt';
$contents = file_get_contents($textfile);
date_default_timezone_set('Asia/Tokyo');
$contents .= Carbon::now()->format('Y-m-d H:i:s')."\n";
file_put_contents($textfile, $contents);
(上記例ではCarbonを使用しているが、個人の好みです。
日付時刻の処理はCarbonのほうが直感的な表現ができると思うからです。)
####実行したいコマンドをbatファイルとして作成
C:\crontest\addTime_command.bat
C:\xampp73\xampp\php\php C:\crontest\addTime.php
※ phpを例として、上記のように同一Windowsの配下に複数バージョンをインストールしている場合、
実行したいバージョンのphpのディレクトリを指定してください。
####そのbatファイルをバックグラウンドで実行するためにvbsファイルを用意
C:\crontest\addTime_batch.vbs
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c ""C:\crontest\addTime_command.bat""", 0
※ 引数でウィンドウスタイルを設定します。 0は「ウィンドウを隠す」という意味です。
上記vbsファイルを定期実行するためにWindowsのタスクスケジューラを設定
Windowsメニュー
→Windows管理ツール
→タスクスケジューラ
もしくは
Windowsアイコン右クリック
→ファイル名を指定して実行する
→taskschd.msc
操作ペインの「タスクの作成」を選択すると「タスクの作成」画面が表示されます。
適当に名前などを付けてください。
トリガータブを選択し、「新規」ボタンを押すと「新しいトリガー」画面が表示されます。
タスクの開始を「スケジュールに従う」、どのぐらいの頻度で実行するかは自由に調整してください。
本例では1分間間隔で設定。
設定を「1回」、繰り返し間隔を「1分間」、継続時間を「無期限」に設定します。
(プルダウンメニューの中には1分間の選択がないのですが、手入力が可能です。)
操作タブを選択し、「新規」ボタンを押すと「操作の編集」画面が表示されます。操作を「プログラムの開始」とし、プログラム/スクリプト欄に「wscript.exe」、引数の追加欄にはvbsのパス名(C:\crontest\addTime_batch.vbs)を記入します。
パス名に空白を含む場合はパス名を "~" でくくってください。
最後にOKボタンで、タスクの作成完了となり、定期実行が開始されます。
次回タスク実行時刻、前回の実行時刻、前回の実行結果(成功/失敗)などについては、
タスクスケジューラで確認することが可能です。
実行結果
C:\crontest\time.txt
2020-09-03 12:15:00
2020-09-03 12:16:00
2020-09-03 12:17:00
最後に
繰り返し処理ができると言っても、設定の方法はcronの指定方法とだいぶん違いますね。
一応Laravelのスケジューラを実行する際にはこういう風に設定すれば良いと思います。
もっと細かく設定したい場合は、別途cron機能があるソフトをインストールするか、
Windows Subsystem for Linuxをダウンロード・有効にしてcronで設定してみてください。
以上、お役に立てればうれしいです!