2 votos

Problemas para crear el directorio de ejecución de secuencias de comandos por launchd

Tengo un sencillo script que crea un nuevo directorio basado en la fecha en que se copia a continuación, un conjunto de archivos en ese directorio. Funciona muy bien desde la Terminal. Cuando me configurarlo para que se ejecute como un UserAgent se produce un error. El registro de error de muestra que ha cambiado las rutas de /Users/Study/xxx a /var/root/xxx. He intentado correr como root desde la Terminal y todavía funciona. He aseguró root no es el propietario del archivo de secuencia de comandos. He cambiado mi ruta original de ~/xxx a la /Users/Study/xxx , pero por alguna razón cuando se ejecuta desde launchd se cambia la ruta de acceso. Alguna idea?

secuencia de comandos:

!/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>

1voto

klanomath Puntos 19587

Usted tarea de copia de seguridad es (muy) específica del usuario y no de servicio del sistema, por lo que la ubicación adecuada para el lanzamiento del agente es de ~/Library/LaunchAgents/. Si pones el plist en /Library/LaunchAgents se ejecutará en nombre de cada usuario ha iniciado sesión en ~ 5.11 pm - que se producirá para la mayoría de los usuarios, ya que probablemente no pueda acceder a algunos o la mayoría de sus carpetas de usuario/archivos.


El uso de un adecuado proceso en la secuencia de comandos #!/bin/bash.. y hacer el script ejecutable: chmod +x /Users/Study/Library/Scripts/spidbackup.sh.

Eliminar completamente el plist de la launchctl db con sudo launchctl remove com.spidbackup y launchctl remove com.spidbackup. Mueva el plist /Usuarios/Estudio/Library/LaunchAgents/ chown/chmod a su usuario y extraiga la llave de WorkingDirectory y la cadena asociada.

Finalmente, vuelva a cargar el agente con:

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

Los permisos adecuados/comunidad de bienes 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

suponiendo que el Estudio es su nombre de usuario.

Por favor, consulte también uso de mayúsculas (por ejemplo, estudio vs Estudio).

0voto

Mike Puntos 21

Yo en realidad no tengo la respuesta, pero era evidente que algo que ver con los permisos y la propiedad. Empecé con un archivo nuevo y una nueva plist. Todo funciona como se espera. Gracias por todos los comentarios.

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