web-dev-qa-db-ja.com

OSXは、ログイン時にplistファイルを使用してsshfsをマウントするスクリプトを実行します

Plistとlaunchd.plistのマニュアルページ、およびログイン時にスクリプトを実行するためのplistファイルの使用に関する投稿を読みました。しかし、私は物事がうまくいくように見えることができます。

スクリプトの場所と権限:

sshfs_mounts.sh

ls -al Library/scripts/

-rwxr-xr-x   1 jason  staff   288 May 10 17:06 sshfs_mounts.sh

cat Library/scripts/sshfs_mounts.sh

#!/bin/bash
#
## automounting of sshfs directories
mount_cosmic ()
{
    /usr/local/bin/sshfs [email protected]:/media/NetworkShare/spacedock-1 /Users/jason/share;
}
mount |grep "/Users/jason/share/"
if [ $? == 1 ] && [ -d "/Users/jason/share" ] && [ $USER == "jason" ]; then
    mount_cosmic
fi

元の投稿から編集:

スクリプトを手動で実行すると、期待どおりに実行されます。 plistをロードできます(launchctl load ~/Library/LaunchAgents/local.sshfs.plist)そしてそれを起動します(launchctl start ~/Library/LaunchAgents/local.sshfs)、ただし、スクリプトは実行されません。ログ内(cat /var/log/system.log |grep local.sshfs)私は得る:

May 11 09:30:26 rover com.Apple.launchd.peruser.504[305] (local.sshfs.plist): Throttling respawn: Will start in 10 seconds

Plistファイルの場所と権限は次のとおりです。

ls -al Library/LaunchAgents/local.sshfs.plist

-rw-r--r--  1 jason  staff  419 May 10 18:14 Library/LaunchAgents/local.sshfs_mounts.plist

そしてファイル(ゴードンのアドバイスを受けた後に編集^ 2):

<?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>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>local.sshfs.plist</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/sh</string>
            <string>/Users/jason/Library/scripts/sshfs_mounts.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/sshfs_mounts.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/sshfs_mounts.out</string>
</dict>
</plist>

事前にマハロ。

3
jason

トラブルシューティングを手伝ってくれたGordonのおかげで、plistファイルを適切にフォーマットすることができました(plistはフォーマットにこだわりがあり、テキストエディターの使用がうまくいかなかったため、最終的に plistEdit pro を使用しました)。ログイン時に実行しようとしたスクリプトに問題があったこと。

私を困惑させていた2つのことがありました。 1つ目は、launchdが、sshfsディレクトリをマウントするために必要なサブプロセスをスクリプトに生成させなかったことです。これは、次のキーと値のペアを追加することで修正されました。

<key>AbandonProcessGroup</key>
<true/>

(macworld.comのtwに感謝します フォーラム投稿

ゴードンの提案のおかげで、/tmp/sshfs_mounts.errからエラーを読み取って、コマンドの記述方法に問題があることがわかりました。 sshfsマウントを検索したところ、いくつかのLinuxサイトで、より適切なマウントコマンドを作成するのに役立つ情報が見つかりました。

これが機能するものです。

脚本:

mount | grep /Users/jason/share
if [ $? == 1 ] && [ -d /Users/jason/share ]; then
    /usr/local/bin/sshfs -o idmap=user [email protected]:/spacedock-1 /Users/jason/share
fi

plist

<?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>AbandonProcessGroup</key>
    <true/>
    <key>Label</key>
    <string>local.sshfs.plist</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/jason/Library/scripts/sshfs_mounts.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
4
jason

「plistが返されませんでした」エラーは、.plistファイルを解析できなかったことを意味します。 LableLabelである必要があり、</true><true/>である必要があります。コマンドplutil -lint ~/Library/LaunchAgents/local.sshfs_mounts.plistを使用してplist構文を確認できますが、plist内のデータが起動済みアイテムとして有効かどうかは検出されません。

5
Gordon Davisson