Что я хотел бы сделать:
Когда просматривается mydomain.com/index.php
, запустите скрипт, который входит в систему на другом компьютере (отличном от того, который обслуживает index.php
) в локальной сети сервера и запускает скрипт Python.
Что у меня пока есть:
В index.php
я звоню
shell_exec('/var/www/dir/save.sh '.$ARG1.' '.$ARG2);
Сценарий save.sh
:
#!/usr/bin/expect -f
set cmd "python /path/to/python_script.py"
set file [lindex $argv 0]
set content [lindex $argv 1]
spawn ssh usr@local_ip "$cmd $file $content"
expect "assword:"
send "PWD\r"
interact
Я запустил sudo chmod www-data+x save.sh
, чтобы разрешить PHP-сайту запускать команду. Когда я запускаю sudo -u www-data ./save.sh arg1 arg2
в терминале, все работает как положено, и я вижу вывод python_script.py
(который я печатаю для тестирования).
Однако, при вызове index.php
и повторении вывода shell_exec
-Call, я вижу все до user@ip's password:
, но не вывод python_script.py
, и я могу проверить, что скрипт не был запущен на другом компьютере.
Есть идеи, чего мне не хватает?
Я рад за любую помощь! :)
UPDATE
Спасибо за быстрые ответы. Извините, что не прояснил себя достаточно.
Прежде всего: не используется для публичного / коммерческого / сложного веб-сайта, а скорее для частного удовольствия, а mydomain.com
заблокировано auth_basic
.
Моя настройка: Server1
хостинг mydomain.com
. Server2
запускает некоторые вещи для частного развлечения, например ПО для умного дома и боты Telegram.
Что я хочу сделать: при вызове mydomain.com/index.php
я хочу сохранить те же параметры (на самом деле просто True
или False
) в Server2
, чтобы использовать их для некоторых работающих там сценариев. Server1
и Server2
находятся в одной локальной сети, но только Server1
доступны извне, поэтому идея войти в систему через SSH и запустить Python-Script.
Я ценю любые советы о том, как сделать это лучше или заставить работать мое целевое решение. :)
ОБНОВЛЕНИЕ 2:
Спасибо symcbean за указание на ошибки в скрипте. Я должен признать, что я скопировал и вставил его из других потоков stackoverflow.
Спасибо также ADyson за указание лучших способов решения проблемы. Я обязательно запомню их для более крупных проектов.
Тем временем я смог запустить скрипт. Он все еще очень прост, не отслеживает исключение скрипта Python и не обрабатывает ошибки. Опять же, я не хочу указывать, что я использую это только для частного использования, и mydomain.com/index.php
будет работать только в течение ограниченного времени (это будет календарь andvent и будет отключен после xmas). Но для полноты картины вот что я придумал:
#!/usr/bin/expect -f
set cmd "python /path/to/python_script.py"
set file [lindex $argv 0]
set content [lindex $argv 1]
spawn ssh usr@local_ip
expect "assword:"
send "PWD\r"
expect "*\$ "
send "$cmd $file $content\r"
expect "*\$*"
send "exit\r"
interact