¿Por qué no puedo ejecutar mi script de inicio al iniciar sesión?

1

Estoy usando OS X Yosemite. Estoy intentando ejecutar un script sh al iniciar sesión, pero tengo problemas. Creé el siguiente archivo en mi directorio / Library / LaunchAgents ...

-rwxr-xr-x  1 root  wheel  604 Oct 19 09:24 eXist.plist

El contenido del archivo es el siguiente:

<?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>eXist</string>
        <key>Program</key>
        <string>/Applications/eXist-db/bin/startup.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>UserName</key>
        <string>root</string>
        <key>StandardErorPath</key>
        <String>/tmp/eXistDB.err</string>
        <key>StandardOutputPath</key>
        <string>/tmp/eXistDB.out</string>
    </dict>
</plist>

Sin embargo, no se ejecuta nada (al menos no se generan archivos de salida) y no puedo entender por qué. He comprobado que el camino existe. ¿Cómo puedo hacer que mi script se ejecute al iniciar sesión?

Editar:

Para probar que la ruta existe, aquí está la salida cuando se intenta la ruta en el script versus lo que se sugirió ...

Daves-MacBook-Pro-2:~ davea$ ls /Applications/eXist-db/bin/startup.sh 
/Applications/eXist-db/bin/startup.sh
Daves-MacBook-Pro-2:~ davea$ ls /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh
ls: /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh: No such file or directory
    
pregunta Dave 19.10.2015 - 16:39

2 respuestas

1

Cometiste algunos errores en tu lista:

  • /Applications/eXist-db/bin/startup.sh probablemente no exista si ha instalado eXist-db 2.2

    Una ruta válida es /Applications/eXist-db.app/Contents/Resources/eXist-db/bin/startup.sh

  • StandardErorPath y StandardOutputPath no son claves válidas

    Las claves válidas son StandardErrorPath y StandardOutPath

  • probablemente la raíz < - > problema de launchd ya abordado por patrix

  • el plist no tiene que ser ejecutable

Para iniciar la aplicación después de iniciar sesión con su usuario, simplemente agréguela a Preferencias del sistema - > Usuarios & Grupos - > Su usuario - > Artículos de inicio de sesión

Para iniciar eXist-db 2.0 en el momento de arranque y después de iniciar sesión en su usuario, debe hacer lo siguiente:

Si aún no lo has hecho, primero ingresa:

sudo /Applications/eXist-db/tools/wrapper/bin/exist.sh install

para instalar un LaunchDaemon org.tanukisoftware.wrapper.eXist-db.plist en / Library / LaunchDaemons /. Si desea agregar un StandardErrorPath y StandardOutPath modifique el archivo con sudo nano /Library/LaunchDaemons/org.tanukisoftware.wrapper.eXist-db.plist .

Finalmente debería verse así:

<?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>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.tanukisoftware.wrapper.eXist-db</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/eXist-db/tools/wrapper/bin/exist.sh</string>
        <string>launchdinternal</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/org.tanukisoftware.wrapper.eXist-db.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/org.tanukisoftware.wrapper.eXist-db.stdout</string>
</dict>
</plist>

Cargar el demonio de forma permanente con:

sudo launchctl load -w /Library/LaunchDaemons/org.tanukisoftware.wrapper.eXist-db.plist 

Ahora cree un segundo archivo en ~ / Library / LaunchDaemons / named com.eXist.plist con nano. Debería verse así finalmente:

<?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.eXist</string>
    <key>Program</key>
    <string>/Applications/eXist-db/bin/startup.sh</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/com.eXist.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.eXist.stdout</string>
</dict>
</plist>

Se agregó un StandardErrorPath y StandardOutPath.

Cargue el agente de forma permanente con:

launchctl load -w ~/Library/LaunchAgents/com.eXist.plist

Hecho.

No olvides configurar tu (o la) variable JAVA_HOME correctamente. Si usa una versión más nueva de eXist-db (por ejemplo, 2.2), debe agregar al menos / Contents / Resources / a las rutas de exist.sh y startup.sh en el plist (compruebe las rutas adecuadas abriendo el paquete de aplicaciones.

Sugerencia: no utilice TextEdit para modificar las listas: de lo contrario, los archivos plist podrían tener un formato incorrecto.

    
respondido por el klanomath 19.10.2015 - 19:43
0

No puedes lanzar cosas como el usuario root desde tu carpeta personal LaunchAgents ya que esto crearía un agujero de seguridad bastante grande. Debería haber un mensaje sobre esto en /var/log/system.log .

De man launchd.plist :

  

UserName string

     

Esta clave opcional especifica el usuario para ejecutar el trabajo como. Esta clave solo es aplicable cuando launchd se ejecuta como root.

    
respondido por el nohillside 19.10.2015 - 17:26

Lea otras preguntas en las etiquetas