7

OS X で launchd plist ファイルを使用して実行したい bash スクリプトがあります。問題は、bash スクリプトに sudo コマンドが含まれており、実行が停止していることです。たとえば、私の bash スクリプトは次のようになります。

#!/bin/bash
sudo /opt/local/bin/bindfs -u user1 /Library/WebServer/Documents/user1 /vhosts/user1/public_html
sudo /opt/local/bin/bindfs -u user2 /Library/WebServer/Documents/user2 /vhosts/user2/public_html

私のcom.test.bindfs.plistファイルは次のようになります(Lingonで作成):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>GroupName</key>
    <string>admin</string>
    <key>Label</key>
    <string>com.jamespayne.bindfs</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/bindfs.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

起動後にスクリプトを実行し、パスワードを入力してスクリプトが機能することを確認しましたが、起動時に実行されません。launchd plist は実行されていますが、次のエラーが表示されます。

sudo: tty が存在せず、askpass プログラムが指定されていません

これを機能させる方法や、なぜそのエラーが発生するのかを知っている人は誰でも。ありがとう。

4

3 に答える 3

4

おそらく、プロパティ リストを移動して/Library/LaunchDaemons/、スクリプトから sudo コマンドを削除できます。

man launchdman launchd.plist、およびこのブログ投稿を参照してください。

于 2012-10-11T15:55:45.817 に答える
2

sudo対話型コマンドであり、続行するにはパスワードを入力する必要があります。sudottyが見つからないため、単にエラーで終了すると思います。

必要なコマンドは ですsu。これは非対話型ですが、実行するにはルートになる必要があるという唯一の例外があります。ただし、あなたの場合、スクリプトがとにかく特権ユーザーによって実行されていることを考えると、おそらくまったく必要ありませんか?

また、なぜスクリプトを に入れているの/usr/binですか? 悪いアイデア; 代わりに使用し/usr/local/binます (または/usr/local/sbin存在する場合)。

于 2012-10-11T12:24:54.993 に答える