Тот странный, и я не уверен, где искать ответы.
у меня есть scriptname.sh
скрипт, который я запускаю вручную из запускаемого вручную сеанса экрана. Этот scriptname.sh вызывает отдельный скрипт PHP, который, в свою очередь, выполняет такую команду:
$proc = popen("su username -c 'timeout 120 phantomjs --proxy=".$ip.":".$port." --cookies-file=/some/path/cookies/".$filename." /some/path/bot.js \"".$firstParam."\" \"".$secParam."\" '", 'r');
Все в порядке и работает гладко в примере выше.
Однако я хотел автоматизировать этот процесс (cron) и освободить себя от необходимости выполнять все вручную при перезагрузке сервера.
Здесь возникает проблема. Когда я выполняю скрипт через экранную команду, вот так:
screen -dmS screenname /path/to/scriptname.sh
переменные $ip
а также $port
не передаются в командную строку. Жутко $filename
, $firstParam
а также $secParam
пройти просто отлично. Фактический scriptname.sh выполняется и работает внутри созданного экрана, но без упомянутых переменных PHP. Они теряются где-то в процессе. Так ps aux
дает этот вывод:
sh -c su www-data -c 'timeout 120 phantomjs --proxy=: --cookies-file=/some/path/cookies/cookiename.txt /some/path/bot.js "firstparam" "secondparam"
su www-data -c timeout 120 phantomjs --proxy=: --cookies-file=/some/path/cookies/cookiename.txt /some/path/bot.js "firstparam" "secondparam"
sh -c timeout 120 phantomjs --proxy=: --cookies-file=/some/path/cookies/cookiename.txt /some/path/bot.js "firstparam" "secondparam"
timeout 120 phantomjs --proxy=: --cookies-file=/some/path/cookies/cookiename.txt /some/path/bot.js firstparam secondparam
phantomjs --proxy=: --cookies-file=/some/path/cookies/cookiename.txt /some/path/bot.js firstparam secondparam
вместо этого:
sh -c su www-data -c 'timeout 120 phantomjs --proxy=117.164.2.159:8123 --cookies-file=/some/path/cookiename.txt /some/path/bot.js "http://firstparam.is.url" "http://secparam.is.url.too" '
su www-data -c timeout 120 phantomjs --proxy=117.164.2.159:8123 --cookies-file=/some/path/cookiename.txt /some/path/bot.js "http://firstparam.is.url" "http://secparam.is.url.too"
sh -c timeout 120 phantomjs --proxy=117.164.2.159:8123 --cookies-file=/some/path/cookiename.txt /some/path/bot.js "http://firstparam.is.url" "http://secparam.is.url.too"
timeout 120 phantomjs --proxy=117.164.2.159:8123 --cookies-file=/some/path/cookiename.txt /some/path/bot.js http://firstparam.is.url http://secparam.is.url.too
phantomjs --proxy=117.164.2.159:8123 --cookies-file=/some/path/cookiename.txt /some/path/bot.js http://firstparam.is.url http://secparam.is.url.too
Вопрос в том — почему и как это исправить? Любая помощь будет принята с благодарностью. Я избегаю символы неправильно …? Кроме того, любые советы по оптимизации приветствуются.
Задача ещё не решена.
Других решений пока нет …