OSX executa o script para montar o sshfs no login com um arquivo plist

3

Eu li as man pages de plist e launchd.plist, bem como posts sobre o uso de arquivos plist para executar scripts no login; mas parece que consigo fazer as coisas funcionarem.

Meu local de script e permissões:

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

EDITADO DO POST ORIGINAL:

Se eu executar o script manualmente, ele será executado conforme o esperado. Eu posso carregar o plist ( launchctl load ~/Library/LaunchAgents/local.sshfs.plist ) e lançá-lo ( launchctl start ~/Library/LaunchAgents/local.sshfs ), mas ele não executa o script. Nos logs ( cat /var/log/system.log |grep local.sshfs ) eu recebo:

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

Aqui está minha localização e permissões para o arquivo 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

E o arquivo (EDITADO depois de receber o conselho de Gordon ^ 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>

Mahalo antecipadamente.

    
por jason 11.05.2013 / 06:33

2 respostas

4

Graças ao fato de Gordon ter me ajudado a solucionar problemas, consegui que o arquivo plist fosse formatado corretamente (acabei usando plistEdit pro porque os engenheiros são exigentes quanto à formatação e uso de um editor de texto não funcionou para mim) e determinar que houve um problema no script que eu estava tentando executar no login.

Havia duas coisas que estavam me atrapalhando. A primeira é que o launchd não estava permitindo que meu sub-processo de geração de scripts fosse necessário para montar um diretório sshfs. Isso foi corrigido adicionando o seguinte par de valores-chave:

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

(graças a tw do post do fórum do macworld.com

Mais uma vez, graças às sugestões de Gordon, consegui ler os erros de /tmp/sshfs_mounts.err para descobrir que havia algo errado com o modo como meu comando foi escrito. Fiz algumas pesquisas em montagens sshfs e encontrei informações em alguns sites Linux que me ajudaram a elaborar um melhor comando de montagem.

Então, eis o que funciona.

Script:

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>
    
por 14.05.2013 / 00:45
5

O erro "no plist was returned" significa que não foi possível analisar o arquivo .plist. Eu vejo dois problemas de improviso: Lable deve ser Label e </true> deve ser <true/> . Você pode usar o comando plutil -lint ~/Library/LaunchAgents/local.sshfs_mounts.plist para verificar a sintaxe do plist, embora não detecte se os dados no plist são válidos como um item launchd.

    
por 11.05.2013 / 08:32