Launch Agent no ejecuta Bash File

0

Tengo un script de bash imagecopy.sh que respalda las imágenes que están ubicadas en un subdirectorio con una cadena de fecha prependida: esto funciona perfectamente bien cuando lo ejecuto desde el directorio en el que reside en - /Users/danny/Library/Caches/ .

El script es

#!/usr/bin/env bash
cat himawaripy/latest.png > himawaripy/output/$(date "+%Y.%m.%d-%H.%M.%S").png

También agregué el directorio donde se encuentra el script a mi $PATH usando nano .profile y lo confirmé usando echo $PATH .

/Users/danny/Library/Caches:/Users/danny/anaconda/bin:/Library/Frameworks/Python.framework/Versions/3.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/TeX/texbin

Me gustaría ejecutar el script de bash periódicamente usando un LaunchAgent, ubicado en /Users/danny/Library/LaunchAgents .

El archivo LaunchAgent com.user.imagecopier.plist hace referencia a la ubicación del script por las líneas ..

..other code

<key>Program</key>
<string>imagecopy.sh</string>

...etc

Supongo que hay un error al vincular el archivo LaunchAgent con el script, cualquier sugerencia sería muy apreciada.

Editar: se actualizó el archivo de agente de lanzamiento como se sugiere

<?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.imagecopier</string>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/danny/Library/Caches/imagecopy.sh</string>
  </array>

  <key>Nicer</key>
  <integer>1</integer>

  <key>StartInterval</key>
  <integer>60</integer>

  <key>RunAtLoad</key>
  <true/>

</dict>
</plist>
    
pregunta danny_C_O_T_W 04.08.2016 - 11:37

1 respuesta

1
  1. ¡Para almacenar un script de shell en una carpeta de cachés es muy raro !
  2. Si usa rutas absolutas en su secuencia de comandos y no tendrá que agregar rutas oscuras a su variable PATH.

Limpie su archivo .profile / .bash_profile y elimine / Users / danny / Library / Caches: ¡parte!

Cree una carpeta bin en su carpeta de usuario y coloque un script con el nombre imagecopy.sh . El contenido del script es:

#!/bin/sh
cp /Users/danny/Library/Caches/latest.png /Users/danny/Documents/output/$(date "+%Y.%m.%d-%H.%M.%S").png

Crea una carpeta de salida apropiada. En el ejemplo anterior, uso ~ / Documents / output.

Cree el archivo /Users/danny/Library/LaunchAgents/com.user.imagecopier.plist con el contenido:

<?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.imagecopier</string>
    <key>Nicer</key>
    <integer>1</integer>
    <key>Program</key>
    <string>/Users/danny/bin/imagecopy.sh</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/com.user.imagecopier.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.user.imagecopier.stdout</string>
    <key>StartInterval</key>
    <integer>60</integer>
</dict>
</plist>

El archivo /tmp/com.user.imagecopier.stderr mostrará cualquier error (por ejemplo, si falta la carpeta de salida o no hay latest.png disponible)

Cargar el archivo con:

launchctl load -w /Users/danny/Library/LaunchAgents/com.user.imagecopier.plist

Si el agente de inicio funciona correctamente, puede eliminar la parte

    <key>StandardErrorPath</key>
    <string>/tmp/com.user.imagecopier.stderr</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.user.imagecopier.stdout</string>

de la lista.

    
respondido por el klanomath 04.08.2016 - 19:08

Lea otras preguntas en las etiquetas