3 votos

Launchd ganó ' ejecutar un comando bindfs

Quiero usar launchd para ejecutar bindfs comandos de inicio de sesión como root. Tengo un plist en /Library/LaunchAgents/loginsftpjailmount.plist (con chmod 600) y un script de shell en /usr/local/bin/loginsftpjailmount.sh.

Debo comenzar diciendo que funciona - si puedo cambiar el script de bash para ejecutar

mkdir /Users/Me/Desktop/itworks

entonces se crea correctamente el directorio "itworks", tanto en el inicio de sesión y la ejecución de

sudo launchctl load /Library/launchAgents/loginsftpjailmount.plist

Y la carpeta creada es propiedad de root y tengo que escribir en mi contraseña para eliminarlo. Cuando yo ejecute manualmente el script de bash desde la terminal mediante sudo, el bindfs comando funciona.

Entonces, para resumir - sé que el script funciona. Sé el plist obras. Sé que el trabajo en conjunto con launchd. Pero el bindfs comando no se ejecuta! He comprobado el registro del sistema con

sudo grep com.user /var/log/system.log

y dice que sale con error 127 (com.el usuario es parte de la etiqueta para mi plist). Busqué en línea y ninguna de las soluciones para el error 127 trabajo para mí. Para referencia, dos plists que he utilizado son:

<?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>Label</key>
    <string>com.user.loginitem</string>
<key>ProgramArguments</key>
<array>
    <string>bash</string>
    <string>-c</string>
    <string>bash -c "bindfs /Volumes/BRIGHTRED/ServedDocuments /sftpjail/Documents"</string>
</array>
<key>RunAtLoad</key>
<true/>

y también

<?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>Label</key>
        <string>com.user.loginitem</string>
        <key>Program</key>
        <string>/usr/local/bin/loginsftpjailmount.sh</string>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

2voto

klanomath Puntos 19587

El bindfs proceso tiene que empezar con privilegios de root. Se lanza como agente de prevenir esto.

Por lo sudo launchctl unload ... y sudo launchctl remove ... (el subcomando eliminar elimina el agente de la launchd de base de datos el archivo no se elimina!) el plist, mueva el plist /Library/LaunchDaemons/ y volver a cargarlo con sudo launchctl load ....

Una nombrado correctamente y compuesto org.usuario.bindfs.sftpjail.plist tendría este aspecto:

<?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>Label</key>
        <string>org.user.bindfs.sftpjail</string>
        <key>ProgramArguments</key>
        <array>
                <string>/opt/local/bin/bindfs</string>
                <string>/Volumes/BRIGHTRED/ServedDocuments</string>
                <string>/sftpjail/Documents</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/tmp/org.user.bindfs.sftpjail.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/org.user.bindfs.sftpjail.out</string>
        <key>WatchPaths</key>
        <array>
                <string>/Volumes/BRIGHTRED</string>
        </array>
</dict>
</plist>

El WatchPath clave a menudo es necesario (lo fue en mi caso) para evitar problemas de sincronización. Usted puede eliminar las claves StandardErrorPath/StandardOutPath y sus cuerdas después de asegurarse de que todo funciona correctamente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X