0 votes

L'agent de lancement ne fonctionne pas Fichier Bash

J'ai un script bash script. imagecopy.sh qui sauvegarde les images situées dans un sous-répertoire avec une chaîne de date : cela fonctionne parfaitement lorsque je l'exécute à partir du répertoire dans lequel il réside - /Users/danny/Library/Caches/ .

Le script est

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

J'ai également ajouté le répertoire où se trouve le script à mon fichier $PATH en utilisant nano .profile et l'a confirmé en utilisant 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

J'aimerais exécuter périodiquement le script bash script à l'aide d'un LaunchAgent, situé dans /Users/danny/Library/LaunchAgents .

Le fichier LaunchAgent com.user.imagecopier.plist fait référence à l'emplacement du script par les lignes..

..other code

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

...etc

Je suppose qu'il y a une erreur dans la liaison entre le fichier LaunchAgent et le script, toute suggestion serait grandement appréciée.

Editer : Mise à jour du fichier LaunchAgent comme suggéré

<?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>

1voto

klanomath Points 63400
  1. Pour stocker un shell script dans un dossier Caches, procédez comme suit très rare !
  2. Si vous utilisez des chemins absolus dans votre script et dans la plist, vous n'avez pas besoin d'ajouter des chemins obscurs à votre variable PATH.

Nettoyez votre fichier .profile/.bash_profile et supprimez la partie /Users/danny/Library/Caches: !

Créez un dossier bin dans votre dossier utilisateur et placez-y un script avec le nom imagecopy.sh . Le contenu du script est le suivant :

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

Créer un dossier de sortie approprié. Dans l'exemple ci-dessus, j'utilise ~/Documents/output.

Créez le fichier /Users/danny/Library/LaunchAgents/com.user.imagecopier.plist avec le contenu :

<?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>

Le fichier /tmp/com.user.imagecopier.stderr affichera toute erreur (par exemple, si le dossier de sortie est manquant ou si le fichier latest.png n'est pas disponible).

Charger le fichier avec :

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

Si l'agent de lancement fonctionne correctement, vous pouvez retirer la pièce.

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

de la liste.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X