Мне нужно запускать php-скрипт в полночь каждую ночь на моем сервере. В linux-системе я создал работу cron, но я застрял в системе Windows.
Я знаю, что мне нужно настроить задачу, используя планировщик задач Windows, и что задача должна будет запускать файл .bat, который, в свою очередь, запустит php-файл, но я застрял, пытаясь записать файл .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 ». Убедитесь, что вы правильно набрали имя, а затем повторите попытку.
Что я пропустил?
Команда START
дополнительно принимает заголовок для созданного окна в качестве первого аргумента; в этом случае он считает, что C:\Program Files (x86)\PHP\v5.3\php.exe
– это заголовок для отображения, а -f
(второй аргумент) – исполняемый файл, который вы хотите запустить.
Поэтому вы можете исправить это, указав заголовок заполнителя, например
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
На самом деле вам даже не нужен пакетный файл. Вы можете запустить php-скрипт из планировщика задач.
Просто позвольте планировщику задач запустить php.exe и установить расположение php-файла в качестве аргумента задачи.
Могу ли я предложить небольшое изменение.
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 с пробелами.
К сожалению, это заняло около 10 часов, чтобы понять. Некоторые протоколы, такие как WinRM и PSEXEC, должны передавать зарегистрированную учетную запись пользователя независимо от предоставленных учетных данных (это или PHP переопределяет все, что вы вводите). Во всяком случае, чтобы получить PSEXEC, WinRM или просто отпустить пакетные файлы, которые подключаются к удаленным компьютерам, вам нужно будет изменить запуск IIS как учетной записи пользователю с правами на эти ресурсы (учетную запись службы). Я понимаю, что это огромная дыра в безопасности, но это по дизайну. PHP является безопасным, так что его нельзя легко взломать, вы должны переопределить свою безопасность, указав прогон как учетную запись. Не то же самое, что и ваша учетная запись пула приложений, хотя ваши учетные данные IIS могут использовать вашу учетную запись пула приложений.
Попробуйте таких парней!
cd E: \ xampp \ htdocs \ my-project E: Расписание php artisan: запустить