2017-12-19 16 views
1

最近、私の「iMac 27」(2011年中頃)を「ヨセミテ」から「ハイシエラ」にアップグレードしましたが、以前働いていた機能を取り戻すのに苦労しています。iMacのシェルスクリプトがハイシエラで動作しなくなった

簡潔に説明するにはまず、地下の気象から地元気象データを取得し、いくつかのPythonスクリプトをラズベリーのpi3で使用します。これらのスクリプトは、データをマッサージしてから、piにXMLファイルを作成して保存します。私はまた、piで、呼び出しを探すhttpサーバを実行します。

iRuleを使用するiPadでは、「天気予報」と呼ばれるボタンがあります。このボタンを押すと、自分のISY994i(Insteon)コントローラのネットワークリソースがトリガーされ、これがpiサーバー上のhttpサーバーを呼び出してパラメーターを送信します。 piが呼び出しを受け取り、パラメータを検証すると、piで別のPythonスクリプトが実行され、以前に作成されたXMLファイルのデータを受け取り、次のステップのための適切な形式にします。最後に、このスクリプトはApache2経由でiMacにGETリクエストを送信し、天気予報を大声で読み込みます。

これはヨセミテでうまくいきましたが、今ではという部分が機能していないと言ってアップグレードしました。

私は、このプロセスでは、PIから、と呼ばれているのiMac上の3つのシェルスクリプトを持っている...

saysomethinghttp9a.shこれは、内の現在の音量レベルと格納を読み込むと呼ばれる最初のスクリプトですローカルファイル(iMac上)。音量レベルを容認できる音量に変更します(私は18を使用します)。

!/bin/bash 
echo -e "Content-type: text/html\n" 

PHRASE=`echo "$QUERY_STRING" | sed -n 's/^.*phrase=\([^&]*\).*$/\1/p' | sed "s/+/ /g" | sed "s/%20/ /g"` 

cat << junk 
<html> 
<head> 
<title> 
saying 
</title> 
</head> 
<body> 
junk 

currVol=$(osascript -e "get volume settings") 

echo "Current Volume Setting = $currVol" 

var1=$(echo $currVol | cut -d":" -f1) 
var2=$(echo $currVol | cut -d":" -f2) 
origVol=$(echo $var2 | cut -d"," -f1) 
echo $origVol 
parm="set volume output volume $origVol" 
echo $parm 

destfile="/Users/Sarah/Sound_Volume/Volume1.txt" 
echo $parm > $destfile 

osascript -e "set volume output volume 18" 

cat << junk 
</body> 
</html> 
junk 

saysomethinghttp9.sh音量レベルが設定された後、このスクリプトは、PIから送信されているものに基づいて「と言う」の部分を行います。 piはこのスクリプトを呼び出し、私が言いたい言葉であるパラメータを送ります。この呼び出しは、イントロ、日付、時刻、天気予報、および終了のために数回繰り返されます。そして、最初のステップで作成されたファイルから元のボリュームを読み取り、

#!/bin/bash 

echo -e "Content-type: text/html\n" 

PHRASE=`echo "$QUERY_STRING" | sed -n 's/^.*phrase=\([^&]*\).*$/\1/p' | sed "s/+/ /g" | sed "s/%20/ /g"` 

cat << junk 
<html> 
<head> 
<title> 
saying 
</title> 
</head> 
<body> 
junk 

say "Hey There" 

cat << junk 
</body> 
</html> 
junk 

saysomethinghttp9b.sh最後に、この最後のスクリプトが呼び出されるは、その音量にリセットします。

#!/bin/bash 
echo -e "Content-type: text/html\n" 

cat << junk 
<html> 
<head> 
<title> 
saying 
</title> 
</head> 
<body> 
junk 

file="/Users/Sarah/Sound_Volume/Volume1.txt" 
echo $file 
read -d $'\x04' parm < "$file" 
echo $parm 

osascript -e "$parm" 

cat << junk 
</body> 
</html> 
junk 

把握しようでは

(iTunesのからの音楽の音量は、はるかに大きすぎるので、私はボリュームを調整するための手順を経るノートはコマンド「と言います」)何が間違っている私は、多くの事を試してみました:

  • 私は(それに渡されたパラメータの「と言う」と単にラインに入れては「ちょっとそこ」と言うノート番目を排除するために、スクリプトsaysomethinghttp9.shを編集しました上記のコードで編集されたバージョンです)

  • 私は、その後のiMac上の端末セッションを開いて、そこからコマンドを発行した...

    • ./saysomethinghttp9a.sh

    • ./saysomethinghttp9。端末から呼び出されたときにそれは問題ではなかったので、すべての3つのスクリプトが働い./saysomethinghttp9b.sh

SH

  • iMacへの呼び出しをデバッグするために、私はiPad、pi、およびISY994iをプロセスから削除することでプロセスを単純化しました。代わりに、ブラウザを使用して同じネットワーク上のPCからiMacに電話をかけようとしていました。

  • http://10.0.1.11/cgi-bin/saysomethinghttp9a.sh

    • http://10.0.1.11/cgi-bin/saysomethinghttp9a.sh

    • http://10.0.1.11/cgi-bin/saysomethinghttp9.sh

    • は、PC上で、そのスクリプト saysomethinghttp9a.shブラウザから直接スクリプトを実行した結果だった

      sa ysomethinghttp9b.shは働いたがsaysomethinghttp9.shしなかった!ここで

      のiMacからのアクセスとエラーのログエントリは... PC上のブラウザからの呼び出しを試みた後

      アクセスログ

      10.0.1.195 - - [18/Dec/2017:21:33:30 -0500] "GET /cgi-bin/saysomethinghttp9a.sh HTTP/1.1" 200 197 
      
      10.0.1.195 - - [18/Dec/2017:21:34:04 -0500] "-" 408 - 
      
      10.0.1.195 - - [18/Dec/2017:21:33:44 -0500] "GET /cgi-bin/saysomethinghttp9.sh HTTP/1.1" 200 53 
      
      10.0.1.195 - - [18/Dec/2017:21:33:49 -0500] "GET /cgi-bin/saysomethinghttp9.sh HTTP/1.1" 200 53 
      
      10.0.1.195 - - [18/Dec/2017:21:35:05 -0500] "GET /cgi-bin/saysomethinghttp9b.sh HTTP/1.1" 200 135 
      

      エラーログ

      [Mon Dec 18 21:34:44.356130 2017] [cgi:warn] [pid 29997] [client 10.0.1.195:60109] AH01220: Timeout waiting for output from CGI script /Library/WebServer/CGI-Executables/saysomethinghttp9.sh 
      
      [Mon Dec 18 21:34:44.356519 2017] [core:error] [pid 29997] (70007)The timeout specified has expired: [client 10.0.1.195:60109] AH00574: ap_content_length_filter: apr_bucket_read() failed 
      
      [Mon Dec 18 21:34:49.949284 2017] [cgi:warn] [pid 29575] [client 10.0.1.195:60107] AH01220: Timeout waiting for output from CGI script /Library/WebServer/CGI-Executables/saysomethinghttp9.sh 
      
      [Mon Dec 18 21:34:49.949652 2017] [core:error] [pid 29575] (70007)The timeout specified has expired: [client 10.0.1.195:60107] AH00574: ap_content_length_filter: apr_bucket_read() failed 
      
      です

      完全な開示のために、私のプログラミング経験は比較的限られています。私はしばしば、オンラインで見つけた例を使って物事をまとめます。

      私は上記のエラーをどのように解釈するのか分かりません! 「指定されたタイムアウトが期限切れになっています」に関連する唯一の情報は、多くのデータが処理されている状況に関連していました。私の場合、処理されるデータはほとんどありません!

      今後の進め方については、お手数ですが、

      編集:

      マークSetchellからのコメントを読んだ後、私は私のスクリプトに「は/ usr/binに/ ID」を追加し、端末に最初のスクリプトを実行し、ユーザー名が正しかったことを見ました。その後、私は他のPCから同じスクリプトを実行し、ユーザー名が「_www」であることを確認しました!そこで、httpd.conf(apache2)ファイルを編集し、セクションを変更しました。ユーザーSarahグループスタッフ。しかし、これは問題を修正しませんでした!

      次は、「suを使ってそのユーザーになり、スクリプトを試してみよう」という方法を読みました。読書を通じて、私はsudoを使う提案を見つけ出し、最後にsudoersファイルを編集する提案を見つけました。だから私はコマンドを使用してこれをしたsudo visudo。それから私は、次の行に

      サラALL =(ALL)NOPASSWDを追加しました:

      は、その後、私は再びPCからスクリプトを実行しようとしたALLは、しかし、この時間は、スクリプトが走って が再びを言っています!

    +0

    各スクリプトの2行目にPATHが正しく設定されていることを確認して、呼び出したすべてのバイナリを含めるようにしてください。 'say'、' osascript'なので 'export PATH =/bin:/ usr/bin:$ PATH'になります。 –

    +0

    空白、コロン、コンマを 'vol = $(osascript -e" get volume settings "のようなフィールド区切り文字として扱いますが、' osascript'コマンドの第3フィールドを取得するように 'awk'に伝えることで、 | awk -F '[:、]' '{print $ 3}') –

    +0

    マーク...あなたのコメントをいただきありがとうございます。あなたのPATH行をスクリプトに追加しましたが、結果は同じです - 2つのスクリプトは動作しますが、 'say'を実行するスクリプトは動作しません!あなたの現在のボリュームを取得することを簡素化するためのあなたの他の提案に関しては...ありがとう、私は時間があるときにそれを試みます。 – Gary

    答えて

    2

    Mark Setchellのコメントを読んだあと、スクリプトに「/ usr/bin/id」を追加して、スクリプトを端末で最初に実行して、そのユーザー名が正しいことを確認しました。その後、私は他のPCから同じスクリプトを実行し、ユーザー名が「_www」であることを確認しました!そこで、私はhttpd.conf(apache2)ファイルを編集し、User SarahとGroupスタッフを含むセクションを変更しました。しかし、これは問題を修正しませんでした!

    次は、「suを使ってそのユーザーになり、スクリプトを試してみよう」という方法を読みました。読書を通じて、私はsudoを使う提案を見つけ出し、最後にsudoersファイルを編集する提案を見つけました。だから私はコマンドを使ってこれをした。sudo visudo。それから私は、次の行に

    サラALL =(ALL)NOPASSWDを追加しました:

    は、その後、私は再びPCからスクリプトを実行しようとしたALLは、しかし、この時間は、スクリプトが走って が再びを言っています!

    +0

    作業中の管理者ユーザーはパスワードなしでsudoできますか?良いアイデアを発しません...これは誰もあなたのシステムを制御することができます。 –

    関連する問題