Как запустить и забыть команду в php на windows

Я пытаюсь запустить в Windows команду, запускающую putty.exe с конкретными параметрами, которая запустит соединение и выполнит некоторые команды, которые находятся в txt-файле на указанном в сеансе замазки другом сервере. Мне просто нужно было запустить некоторые сценарии с другого сервера в Linux, в то время как этот основной сценарий будет работать на сервере Windows.

Это выглядит так:

$putty_exe_path = 'C:\\putty\\putty.exe';
$linux_command_txt_file_path = 'C:\\putty\\commands_to_run_on_linux.txt';
$putty_session_name = 'puttysessionname';
$linux_user = 'root';
$linux_password = 'password';

$cmd = "\"\"".$putty_exe_path."\" -load ".$putty_session_name." -l ".$linux_user." -pw ".$linux_password." -m \"".$linux_command_txt_file_path."\"\"";

shell_exec($cmd);

И это работает, но есть проблема, когда скрипт в linux, который я запускаю с помощью этого способа, работает долго, потому что мой скрипт ожидает вывода. Я хотел бы запустить эту команду с exec () / shell_exec () или как-то на сервере Windows и выйти. Мне не нужен выход. Мне нужно уволить и забыть. Я искал решение, но все, что я нашел, это:

> /dev/null 2>/dev/null &

но это не работает на окнах, я думаю.

0

Решение

Если вы хотите выполнить консольную команду в Windows и не ждете ее вывода, вы перенаправляете вывод в > NUL

Например, выполните это в php:

var_dump(system("cmd.exe > NUL"));// will output inmediately string(0)""var_dump(system("cmd.exe"));// will wait for the prompt result and write something like Microsoft Windows bla bla bla ...

Кроме того, если вы хотите знать, действительно ли это что-то делает, попробуйте:

  system("echo SOME TEXT > C:\SOME_FILE.txt"); // tHIS WILL Create a text file in the C disk of windows (but we dont add > NUL because there is already an output path !)

Попробуйте с этим, пожалуйста, читайте больше в:

больше информации о

2

Другие решения

Не ответ, но слишком долго для комментария

Важно понимать, что > /dev/null 2>/dev/null & делается.

В операционных системах Linux / Unix / dev / null является эмулируемым устройством для «ничего», оно отбрасывает все, что ему записано. Он, / dev / null, не существует в Windows. Исследуйте больше здесь: https://en.wikipedia.org/wiki/Null_device

В Linux есть два основных потока вывода при запуске команд: stdout и stderr. >/dev/null перенаправляет стандартный вывод в / dev / null, 2>/dev/null перенаправляет stderr в / dev / null и & отправляет команду на задний план. Теперь вы можете использовать это для поиска эквивалентов в Windows.

1

По вопросам рекламы [email protected]