2 votos

Ejecutar una limpieza de icloud desktop en la carga

Tengo el siguiente launchd guardado como agente en: /Users/my_name/Library/LaunchAgents

<?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>local.desktop.cleanup</string>
        <key>ProgramArguments</key>
        <array>
            <string>zsh</string>
            <string>-c</string>
            <string>/usr/local/bin/trash ~/Desktop/Screen*</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>3600</integer>
        <key>StandardErrorPath</key>
        <string>/tmp/local.desktop.cleanup.err</string>
        <key>StandardOutPath</key>
        <string>/tmp/local.desktop.cleanup.out</string>
        <key>KeepAlive</key>
        <dict>
            <key>NetworkState</key>
            <true/>
        </dict>
    </dict>
</plist>

Se trata de un sistema muy sencillo programa que se mueve, en lugar de elimina los archivos seleccionados a la papelera. Sólo he estado probando el éxito del launchd con RunAtLoad y no consigo que funcione. Obtengo el siguiente error en mi archivo de registro después de cada vez que me conecto:

zsh:1: no matches found: /Users/my_name/Desktop/Screen*

Mi Escritorio es en realidad una de esas carpetas de icloud que supongo que MacOS acaba de tener symlinked. Mi teoría es que tal vez estos archivos no existen localmente en el momento de ejecutar el programa. Si este es el caso, o no, agradecería cualquier idea o solución para que este caso de uso específico funcione.

N.B. Notarás que dejé el KeepAlive NetworkState para mostrar que intenté retrasar la ejecución hasta que la red estuviera "viva", sin embargo, esto no contaría con la descarga de ningún archivo.

2voto

ev350 Puntos 111

Bien, he conseguido resolver el problema. Desgraciadamente, era el culpable habitual: ¡El pesado sistema de permisos de privacidad en el que se basa MacOS desde Catalina!

Como estaba ejecutando el comando desde zsh para obtener efectivamente el contexto de usuario correcto para los directorios relativos tuve que hacer lo siguiente:

enter image description here

Ahora bien, me preocupa que esto desvirtúe un poco el propósito de esta seguridad reforzada. Realmente apreciaría cualquier información en cuanto a cómo podría ser mejor para permitir que esto se ejecute sin abrir todo mi sistema operativo a zsh ... Tal vez launchd o launchctl ? Me temo que todavía están bastante abiertos.

2 votos

Posiblemente escribir un shell script para hacer el trashing y ponerlo en el plist. Si el shell script comienza con la línea #!/bin/zsh entonces debería ejecutarse y con suerte sólo tendrá que darle a ese script el permiso.

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