9

サーバーで毎晩真夜中に php スクリプトを実行する必要があります。Linux システムでは cron ジョブをセットアップしましたが、Windows システムで行き詰まっています。

Windows タスク スケジューラを使用してタスクを設定する必要があること、およびタスクが .bat ファイルを実行する必要があること、およびそのタスクが .bat ファイルを実行する必要があることはわかっていますが、.bat ファイルを書き込もうとして立ち往生しています。

私が現在持っているものは次のとおりです。

@echo off
REM this command runs the nightly cron job
start "C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php

しかし、.bat ファイルを手動で実行してテストしようとすると、次のような Windows アラートが表示されます。

「Windows は '-f' を見つけることができません。名前を正しく入力したことを確認してから、もう一度やり直してください。

私は何を逃したのですか?

4

6 に答える 6

9

このSTARTコマンドはオプションで、作成されたウィンドウのタイトルを最初の引数として受け入れます。この場合、それはC:\Program Files (x86)\PHP\v5.3\php.exe表示するタイトルであり、-f(2 番目の引数) は実行したい実行可能ファイルであると考えます。

したがって、プレースホルダーのタイトルを指定することでこれを修正できます。

start "email reminder task" "C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php

または、STARTコマンドを完全に捨てて (独自の機能を使用していない場合)、PHP を直接実行することもできます。

"C:\Program Files (x86)\PHP\v5.3\php.exe" -f C:\inetpub\wwwroot\sitename\crons\reminder-email.php
于 2013-08-28T13:21:06.967 に答える
6

実際、バッチファイルさえ必要ありません。タスク スケジューラから php-script を実行できます。

タスク スケジューラに php.exe を実行させ、php ファイルの場所をタスクの引数として設定するだけです。

于 2013-08-28T13:26:28.953 に答える
3

小さな変更を提案できますか。

echo off
REM This adds the folder containing php.exe to the path
PATH=%PATH%;C:\Program Files (x86)\PHP\v5.3

REM Change Directory to the folder containing your script
CD C:\inetpub\wwwroot\sitename\crons

REM Execute
php reminder-email.php

PS。Apache、MySQL、または PHP を入れるのProgram Filesは悪い考えです。名前にスペースが含まれる Windows フォルダーは使用しないでください。

于 2013-08-28T13:21:24.430 に答える
0

悲しいことに、これを理解するのに10時間近くかかりました。WinRM や PSEXEC などの一部のプロトコルは、提供された資格情報に関係なく、ログインしているユーザー アカウントを渡す必要があります (または、PHP が入力内容を上書きします)。とにかく、PSEXEC や WinRM を取得したり、リモート コンピューターに接続するバッチ ファイルを開始したりするには、IIS 実行アカウントを、それらのリソース (サービス アカウント) に対する権限を持つユーザーに変更する必要があります。これが巨大なセキュリティ ホールであることは認識していますが、これは設計によるものです。PHP は安全であるため、簡単にハッキングすることはできません。実行アカウントを指定してセキュリティをオーバーライドする必要があります。アプリ プール アカウントとは異なりますが、IIS 資格情報はアプリ プール アカウントを使用できます。

于 2017-01-12T03:35:21.563 に答える