Обязательная информация: Я запускаю это с веб-сервера домашнего ПК, Fedora 20 с httpd из yum repo. Я взял базовую версию моего .cgi-файла из: http://www.instructables.com/id/Simple-linux-commands-from-a-web-page/ и пытался изменить его для моих нужд.Выполнение скриптов Bash на стороне сервера через CGI
Моя проблема - я могу очень легко заставить скрипт cgi запускать uname, lspci, ls, а также любой скрипт в папке/usr/bin, который просто отображает текст. Я не могу, однако, запустить сценарий, который на самом деле что-то делает. Например, я не могу заставить cgi запустить «rhythmbox-client -next», чтобы пропустить песню в Rhythmbox Media Player.
Мое намерение: я запускаю «музыкальный бот» для своих друзей ventrilo server, и я хочу дать им (защищенный паролем) способ доступа к боту из Интернета, сменить песни, добавить песню в очередь воспроизведения , ect ect.
функции (ни один из которых я могу работать), что мне нужно не: Следующая песня (Rhythmbox-клиент --next) Предыдущая песня (Rhythmbox-клиент --previous) Добавить песни в очереди (Rhythmbox -clinet --enqueue NAME) Очистить очередь песни (rhythmbox-client --clear-queue Показывать текущую песню (rhythmbox-client -print-playing) Показать список композиций на компьютере (ls/home/user/Music | grep ".mp3")
Попытайтесь, как я мог, я не могу заставить ЛЮБОЙ из этих вещей работать. Я также пытался использовать Banshee вместо rhythmbox с той же проблемой.
раздел сценария, который предполагает, чтобы выполнить команды ниже: эхо «» эха «Элита Музыка Панель Bot управления» PATH = "/ бен:/USR/бен:/USR/UCB:/USR/Opt/бен» экспорт $ PATH эхо "" эхо ""
# test if any parameters were passed
if [ $CMD ]
then
case "$CMD" in
BotInfo)
echo "<pre>"
/bin/BotInfo
echo "System Name:" `/bin/uname -n`
echo "</pre>"
;;
next)
echo "Skipped to the next song."
/bin/rhythmbox-client --next
;;
back)
echo "Repeating the previous song. <pre>"
/bin/rhythmbox-client --previous
echo "</pre>"
;;
playing)
echo "The current song playing is... <pre>"
rhythmbox-client --print-playing
echo "</pre>"
;;
queue)
echo "The requested song has been added to the queue. <pre>"
rhythembox-client --enqueue $QUEUE_SONG
echo "</pre>"
;;
rating)
echo "The rating of the current song has been set to $RATING. <pre>"
/bin/rhythmbox-client --set-rating $RATING
echo "</pre>"
;;
ls)
echo "<pre>"
list=`ls /home/USER/Music | grep ".mp3"`
echo "$list"
echo "</pre>"
;;
*)
echo "Unknown command $CMD<br>"
;;
esac
fi
самый первый из них является простой скрипт, который отображает системное время (дата), CPUInfo, MemInfo, ЭСТ и он работает , Другие же этого не делают.
Я попытался запустить команды Баш, как
echo "$(command)"
для печати разыгрывании я попытался сделать это нравится:
playing=`rhythmbox-client --print-playing`
echo "$playing"
Я также пытался создать скрипт, который :
#!/bin/bash
echo "This command worked!"
rhythmbox-client --next
Я назвал эту rhynext, CHMOD + х и переехал в/USR/бен, при запуске в терминале он работает, когда говорит гр gi, чтобы сделать/usr/bin/rhynext, он ничего не делает.
Пожалуйста, помогите.
Я достаточно умен, чтобы перепроектировать код, если вы можете просто дать мне один сегмент/пример кода, который будет работать, я, скорее всего, смогу преобразовать его в мои приложения. Заранее спасибо.
Редактировать: При запуске скрипта «next» для Banshee в качестве пользователя apache.
sudo -u apache /usr/bin/next
[sudo] password for OMMITED:
Unhandled Exception: System.UnauthorizedAccessException: Access to the path "/usr/share/httpd/.config" is denied.
at System.IO.Directory.CreateDirectoriesInternal (System.String path) [0x00000] in <filename unknown>:0
at System.IO.Directory.CreateDirectory (System.String path) [0x00000] in <filename unknown>:0
at System.IO.DirectoryInfo.Create() [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) System.IO.DirectoryInfo:Create()
at System.IO.Directory.CreateDirectoriesInternal (System.String path) [0x00000] in <filename unknown>:0
at System.IO.Directory.CreateDirectory (System.String path) [0x00000] in <filename unknown>:0
at Hyena.Paths.InitializePaths() [0x00000] in <filename unknown>:0
at Hyena.Paths.set_ApplicationName (System.String value) [0x00000] in <filename unknown>:0
at Banshee.ServiceStack.Application.InitializePaths() [0x00000] in <filename unknown>:0
at Booter.Booter.Main() [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.UnauthorizedAccessException: Access to the path "/usr/share/httpd/.config" is denied.
at System.IO.Directory.CreateDirectoriesInternal (System.String path) [0x00000] in <filename unknown>:0
at System.IO.Directory.CreateDirectory (System.String path) [0x00000] in <filename unknown>:0
at System.IO.DirectoryInfo.Create() [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) System.IO.DirectoryInfo:Create()
at System.IO.Directory.CreateDirectoriesInternal (System.String path) [0x00000] in <filename unknown>:0
at System.IO.Directory.CreateDirectory (System.String path) [0x00000] in <filename unknown>:0
at Hyena.Paths.InitializePaths() [0x00000] in <filename unknown>:0
at Hyena.Paths.set_ApplicationName (System.String value) [0x00000] in <filename unknown>:0
at Banshee.ServiceStack.Application.InitializePaths() [0x00000] in <filename unknown>:0
at Booter.Booter.Main() [0x00000] in <filename unknown>:0
Вы пытались перенаправить поток ошибок в файл (чтобы увидеть, если появляется какое-либо сообщение об ошибке)? – syme
'/ bin/rhythmbox-client' может ожидать подключения к интерфейсу db rhythmbox текущего пользователя, этот cgi не сможет этого сделать. Возможно, вам придется вручную открыть правильный сеанс dbus. –
Когда вы его протестируете, запустите скрипт как пользователь apache (например, 'sudo -u www-data./Yourscript'). –