пользователя. Делаю вот так sudo -H -u myuser php myscript.php. Скрипт запускается и работает почти как надо. Но, при таком способе запуска не получается читать данные из fopen('php://stdin', 'r'), они до туда не доходят. Если запускаю просто php myscript.php, то чтение происходит нормально.
Я думаю, мне нужно как то перенаправить stdin в мой скрипт.
Как это сделать?
sudo -S -H -u myuser php myscript.php
Не помогло. sudo если что сделан безпарольным для обоих юзеров участвующих в процессе. Вот таким образом myuser ALL=(ALL) NOPASSWD: ALL.
Разрешите myuser доступ к каталогу файла, желательно назначить myuser владельцем каталога
sudo перенаправляет stdin дальше, так что проблема в чём-то другом. деталей не хватает. С чего ты решил что проблема именно в stdin?
слушай, это что-то странное. sudo передает stdin тому процессу, который ты запускаешь. $ seq 3 | sed s/2/4/ 1 4 3 $ seq 3 | sudo sed s/2/4/ 1 4 3 Может ли быть такое, что ты запускаешь из каталога, на который myuser не имеет прав? Попробуй запустить в strace и смотри внимательно, на что ему прав не хватило.
Полная картина такая. Есть астериск в нем диалплан. В диалплане вызывается EAGI скрипт exten => 1,n,EAGI(/srv/asterisk/CallHandler.sh, ${HANGUPCAUSE}). В CallHandler.sh вызывается php скрипт вот так php call_handler.php. В таком виде все работает, php шлет команды в астер и получает ответы от него. Но если я делаю в CallHandler.sh sudo -u myuser php call_handler.php то работать перестает. Если точнее отваливается дескриптор в котором аудио и поэтому скрипт падает. Что выяснил: При вызове php срипта через sudo -H -u myuser php call_handler.php в нем открывается дескриптор на чтение $stream = fopen('/dev/fd/3', 'r');, он открывается без ошибок. Потом происходит чтение из этого дескриптора fread($stream, 8180 * 8), при чтении возвращается false. Каких либо ошибок чтения дескриптора php скрип не генерирует. Скрипт просто завершает работу потому что не получает аудио. Как мне оживить этот дескриптор?
опция -C 4 должна помочь
Обсуждают сегодня