J'essaie de résoudre un problème avec un bash script qui est appelé par launchd. Voici un résumé rapide
- L'appel du script manuellement par lui-même fonctionne bien, sans erreur.
- Dans le script de bash, il appelle un AppleScript qui affiche une notification Cet AppleScript fonctionne bien.
- El
.plist
est chargé et démarre à l'intervalle correct et appelle le script de bash. Donc cela fonctionne correctement - El
.plist
est appelé à partir de/Library/LaunchDaemons
(afin qu'il puisse fonctionner indépendamment du fait que quelqu'un soit connecté ou non). Cela signifie que tout est exécuté en tant que Root.
Le problème se produit dans le bash script qui appelle un AppleScript pour afficher une notification - cela ne se produit jamais.
#!/bin/bash
# ------------------------------------------------------------------
sleep 11
echo "This is a test" > test.txt
/usr/bin/osascript /Users/allan/Documents/Scripts/AppleScript/notify.scpt "This is a test" "-Test Test Test" "nosound"
exit 0
C'est ça. Un résumé rapide de ce que je fais :
-
sleep 11
- launchd a besoin d'un minimum de 10 secondes de temps d'exécution du programme par défaut. J'ai juste mis ceci ici pour accommoder launchd -
echo "This is a test"
- J'écris juste une simple chaîne dans un fichier texte pour m'assurer que le script bash script est appelé. Ce fichier est créé avec la chaîne attendue ; cela fonctionne. -
/usr/bin/osascript /Users......blah blah blah...
cela échoue . Il s'agit d'un simple AppleScript qui prend trois arguments (corps, titre et son) pour fournir une notification.
En s'exécutant tout seul ou avec le bash script qui l'appelle, il fonctionne :
Lorsque le bash script est appelé depuis launchd, il semble ne pas fonctionner. Quelqu'un peut-il m'indiquer la bonne direction ? Qu'est-ce qui me manque ?
(OS X 10.11.6)
C'est le .plist
J'utilise (oui je sais que c'est réglé pour un intervalle de 45 secondes... je teste)
<?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.podcastCleanup</string>
<key>Program</key>
<string>/Users/allan/Documents/Scripts/Unix/podcastCleanup.sh</string>
<key>StartInterval</key>
<integer>45</integer>
<key>WorkingDirectory</key>
<string>/Users/allan/Documents</string>
</dict>
</plist>
Voici le notify.scpt
AppleScript qui est utilisé pour générer la notification.
on run argv
set Message to item 1 of argv
set Title to item 2 of argv
set aud to item 3 of argv
set STitle to "Terminal"
set Snd to "Blow.aiff"
if (aud = "sound") then
display notification Message with title Title subtitle STitle sound name Snd
else
display notification Message with title Title subtitle STitle
end if
end run
0 votes
Veuillez ajouter le scpt et le plist. Je suis trop paresseux pour les créer !
0 votes
Aucun problème pour le faire fonctionner sous 10.11.6 en tant que ~/Lib/LaunchAgent - même avec sleep à 1 et StartInterval à 10 sans aucune erreur. Vérifiez les chemins dans le plist et le sh est-il exécutable ?
0 votes
En tant que /Lib/LaunchDaemon l'erreur launchd est "osascript[12982:35171] CFPasteboardRef CFPasteboardCreate(CFAllocatorRef, CFStringRef) : failed to create global data" (erreur de création de données globales)
0 votes
@klanomath - Testé en tant que
Library/LaunchAgent
et cela fonctionne bien, mais j'ai besoin qu'il fonctionne indépendamment du fait que je sois connecté ou non.