Problemas al crear el directorio desde el script ejecutado por launchd

3

Tengo un script simple que crea un nuevo directorio basado en la fecha y luego copia un conjunto de archivos a ese directorio. Funciona bien desde la Terminal. Cuando lo configuro para que se ejecute como UserAgent, falla. El registro de errores muestra que ha cambiado a las rutas de /Users/Study/xxx a /var/root/xxx . He intentado ejecutarlo como root desde Terminal y todavía funciona. Me aseguré de que root no sea el propietario del archivo de script. Cambié mi ruta original de ~/xxx al /Users/Study/xxx , pero por alguna razón, cuando se ejecuta desde launchd, cambia la ruta. ¿Alguna idea?

script:

!/bin/bash

MO=$(date +%d%B%Y)
mkdir /Users/Study/Dropbox/SPID_backups/$MO
cp -r /Users/Study/WebDevelopment/SPID/*.* /Users/Study/Dropbox/SPID_backups/$MO

launchctl 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>Label</key>
    <string>com.spidbackup</string>
    <key>Program</key>
    <string>/Users/Study/Library/Scripts/spidbackup.sh</string>
    <key>StandardErrorPath</key>
    <string>/tmp/com.spidbackup.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.spidbackup.out</string>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key>
            <integer>17</integer>
            <key>Minute</key>
            <integer>11</integer>
        </dict>
    </array>
    <key>WorkingDirectory</key>
    <string>/Users/Study</string>
</dict>
</plist>
    
pregunta Mike 06.11.2016 - 01:23

2 respuestas

1

La tarea de copia de seguridad es (muy) específica del usuario y no tiene servicio del sistema, por lo que la ubicación correcta para el agente de inicio es ~ / Library / LaunchAgents /. Si pones la lista en / Library / LaunchAgents, se ejecutará en nombre de cada usuario que haya iniciado sesión en ~ 5.11pm, lo cual fallará para la mayoría de los usuarios porque probablemente no puedan acceder a algunas o a la mayoría de tus carpetas / archivos de usuarios.

Use un shebang adecuado en el script #!/bin/bash.. y haga que el script sea ejecutable: chmod +x /Users/Study/Library/Scripts/spidbackup.sh .

Elimine completamente el plist de la base de datos de launchctl con sudo launchctl remove com.spidbackup y launchctl remove com.spidbackup . Mueva la lista a / Users / Study / Library / LaunchAgents /, chown / chmod a su usuario y elimine la clave WorkingDirectory y la cadena asociada.

Finalmente, vuelva a cargar el agente con:

launchctl load /Users/Study/Library/LaunchAgents/com.spidbackup.plist 

Los permisos / propiedad apropiados para los archivos son finalmente:

ls -l /Users/Study/Library/Scripts/spidbackup.sh
-rwxr-xr-x  1 study  staff  ... spidbackup.sh

o

-rwx------  1 study  staff  ... spidbackup.sh

y

ls -l /Users/Study/Library/LaunchAgents/com.spidbackup.plist 
-rw-r--r--  1 study  staff  ... com.spidbackup.plist

asumiendo que Study es tu nombre de usuario.

Verifique también el uso de mayúsculas (por ejemplo, estudio frente a Estudio).

    
respondido por el klanomath 06.11.2016 - 02:28
0

En realidad no tengo la respuesta, pero fue claramente algo que ver con los permisos y la propiedad. Empecé de nuevo con un nuevo archivo y una nueva lista. Todo funciona como se espera. Gracias por todos los comentarios.

    
respondido por el Mike 06.11.2016 - 21:23

Lea otras preguntas en las etiquetas