SoftRaid 6.3, AppleScript et Terminal

Panographie

Membre confirmé
5 Avril 2024
32
1
54
Bonjour,

J'utilise SoftRaid pour créer des volumes photo/audio/vidéo en RAID5 de +sieurs centaines de To et tout fonctionne très bien depuis des années.

La version installée est 6.3, seule capable de fonctionner sur des MacPro qui vont de MacOS 10.13.6 High Sierra à la 12.7 Monterey.
Les matériels, ordinateurs et tours de disques, sont installés dans une salle informatique sécurisée, à l'écart des utilisateurs.

En version 5, le logiciel envoyait un email lorsqu'un disque ou un volume rencontrait une défaillance.
Cette fonction a été retirée de la version 6, à mon grand désespoir, pour la réintroduire dans l'actuelle version 8.
Actuellement, seul un message d'alerte s'affiche sur l'écran du serveur, hors de portée des yeux de l'administrateur.

Jusqu'à la version 6, la licence était permanente, alors que depuis la version 7, un système d'abonnement annuel a été mis en place, tout en abandonnant la compatibilité avec High Sierra, soit une partie du matériel/système qui fonctionne encore très bien. C'est dans les vieux pots...

Je suis entré en contact avec le support OWC US (développeur/éditeur), qui m'a gentiment expliqué que je devrais me débrouiller seul.

Bref, je cherche à créer un système d'alerte, par email ou sms/iMessage, via le Terminal et/ou Applescript.
Sauf que SoftRaid n'est pas Applescriptable.
En revanche, on peut le piloter par le Terminal et obtenir des informations sur l'état de la situation.

Exemple : "No problems found with any SoftRaid disks or volumes." ou "The disk xx is more likely fail (based on SMART data) and should be replaced."

Softraid No Problem.pngSoftraid Problem.png

Puisque le Terminal est AppleScriptable, ces fenêtres proviennent de ces quelques lignes :

tell application "Terminal"
activate
do script "softraidtool status"
end tell

Sauf que je ne trouve pas la solution, si c'est possible, de récupérer l'information toutes les heures du Terminal pour conditionner une action dans AppleScript", afin d'envoyer un SMS par exemple :

tell application "Messages"
set targetService to first service whose service type = iMessage
set targetBuddy to first buddy of targetService whose name is "Administrateur"
send "Houston, il y a un problème..." to targetBuddy
end tell

Autre piste de recherche, hors Terminal, comment récupérer l'information SMART qu'un disque est défaillant pour envoyer un SMS.

Merci de votre regard sur mon problème.

Cordialement,
 
Dernière édition:
Bonjour,

Tu peux récupérer les infos du terminal avec l'applescript dans une variable, Puis l'envoyer par message ou mail
Dans le script applescript la variable InfoDisk ...

Set InfoDisk to do script "softraidtool status"
Puis envoi de la variable avec "messages"

Pour que le script se lance toutes les heures soit programmer un "cron" soit avec calendrier.
 
Merci pour ton retour.

Actuellement, AppleScript ne repère pas qu'il s'agit d'une erreur dans le résultat de "softraidtool status". Il va donc m'envoyer un message à chaque boucle, même si tout va bien, ce qui ne correspond pas à la notion d'alerte en cas de problème.
Etant donné que le message d'alerte contient des variables (numéro de disk, série, Bus, Bay), AppleScript a-t-il moyen de reconnaitre un mot dans le résultat du Terminal, comme "Fail" par exemple.

Avant d'introduire une boucle et poser des questions sur le Cronou le Calendrier, que je n'ai jamais utilisé, je vais prendre quelques infos sur Google.

Déjà, pour récupérer les infos du Terminal avec ApplesScript, j'ai tenté :
tell application "Terminal"
activate
set InfoDisk to do script "softraidtool status"
end tell

Le résultat est :
tab 1 of window id 7017 of application "Terminal"

J'ai donc tenté :
tell application "Terminal"
activate
set InfoDisk to do script "softraidtool status"
end tell
tell application "Messages"
set targetService to first service whose service type = iMessage
set targetBuddy to first buddy of targetService whose name is "Administrateur"
send InfoDisk to targetBuddy
end tell

Et le résultat est :
error "Il est impossible de rendre «class pres» id \"E83FF0C0-2EF6-4097-B2E9-B4C17387BB40:+33MonNuméroMobile\" of application \"Messages\" dans le type attendu." number -1700 from «class pres» id "E83FF0C0-2EF6-4097-B2E9-B4C17387BB40:+33MonNuméroMobile"

A savoir que l'AppleScript de base pour envoyer un SMS fonctionne, sauf si mon iPhone est en Wifi sur le réseau local, mais ça c'est un autre problème :
tell application "Messages"
set targetService to first service whose service type = iMessage
set targetBuddy to first buddy of targetService whose name is "Administrateur"
send "Houston, on a un problème..." to targetBuddy
end tell

Je reconnais mon débutantisme en AppleScript...
 
On essai d'abord de récupérer le message du terminal
si j'en crois ta copie écran le do shell script récupère bien l'info donc :

essai juste ce script qui récup l'info du terminal et te l'affiche.
Bloc de code:
set InfoDisk to do shell script "softraidtool status"

Tell application "finder"
activate
display dialog infoDisk
end tell
quel est le résultat ?
 
Dernière édition:
Pour :
tell application "Terminal"
activate
set InfoDisk to do script "softraidtool status"
end tell
tell application "Finder"
activate
display dialog InfoDisk
end tell

Le résultat est :
error "Erreur dans Terminal : Impossible de convertir tab 1 of window id 7075 en type string." number -1700 from tab 1 of window id 7075 to string

Sans fenêtre dans le Finder.
 
Tu as bien fait un copié collé de MON script dans une fenêtre applescript sans rien d'autre (rien d'ajouté ?)
 
Oui çà devrait être çà !
curieux qu'il ne reconnaisse pas la commande ! alors que dans tes copie d'écran elle passe.

Dans le terminal en tapant uniquement:

softraidtool status

Tu as un retour ?
 
Si tu veux regarder de plus près, Softraid propose toutes les versions en démo mais complètement fonctionnelles pendant 14 jours sur :
software.owc.com/support/softraid/

Je suis sur la version 6.3 avec l'installeur et désinstalleur des pilotes sans problème.
Evite la version 8 qui installe des pilotes difficiles à désinstaller.
 
L'info est bien récupérée par AppleScript, mais avec un message d'erreur. J'ai pas dû mettre mon path où il fallait.

Capture 1.png

Capture.png
 
Dernière édition:
Tu peux vérifier si tu as bien le fichier de la commande "softraidtool" à ce chemin, ou chercher son bon emplacement.

Pour çà dans le finder menu aller-->aller au dossier...
Tu entres usr et tu valides, tu auras une fenêtre du dossier usr
Tu cherches ton fichier dans local-->bin ou dans bin ou dans un autre dossier...
Tu seras donc sur du chemin réel de ton fichier "softraidtool"

@sinbad21 avait supposé (exemple)

Ensuite tu mets le bon chemin dans le script et tu essais !
Bloc de code:
set InfoDisk to do shell script "/usr/local/bin/softraidtool status"

tell application "Finder"
set infodisk to infodisk as string
    activate
    display dialog InfoDisk
end tell
 
Dernière édition:
Là vu le message d'erreur il a mis le bon chemin (qui est masqué par la fenêtre du message d'erreur). Le path est bon mais le set de la variable InfoDisk avec le résultat de la commande pose problème.
 
Le chemin "/usr/local/bin/softraidtool" pointe sur un alias de Softraidtool (fenêtre de gauche), qui lui-même pointe sur l'application (fenêtre de droite). J'ai affiché les chemins en bas des fenêtres.

J'ai donc modifié le chemin pour pointer directement sur l'application sans succès :
  • set InfoDisk to do shell script "Prode OLD/Library/Application Support/SoftRaidtool status"
  • set InfoDisk to do shell script "/Library/Application Support/SoftRaidtool status"
  • set InfoDisk to do shell script "Library/Application Support/SoftRaidtool status"
  • set InfoDisk to do shell script "/Bibliothèque/Application Support/SoftRaidtool status"
  • set InfoDisk to do shell script "Bibliothèque/Application Support/SoftRaidtool status"
  • etc, etc...

Capture.png

La syntaxe me rend dingue. Bon, assez pour ce soir. Merci pour votre aide et bonne nuit.
 
C'est à cause du blanc dans Application Support. Essaie ça demain :

Bloc de code:
set InfoDisk to do shell script "/Library/\"Application Support\"/SoftRaidtool status"

edit : mais à mon avis ça donnera le même résultat qu’en passant par l’alias. Peut-être faut-il rajouter un as string à la fin de la commande ?

Bloc de code:
set InfoDisk to do shell script "/Library/\"Application Support\"/SoftRaidtool status" as string
 
Dernière édition:
Bonjour,

Comme a dit @sinbad21 le chemin à l'air bon !
Donc as -tu essayé le script du #13

Ou en ajoutant le "as string" directement à la commande le script devient :
Bloc de code:
set InfoDisk to do shell script "/usr/local/bin/softraidtool status" as string

tell application "Finder"
    activate
    display dialog InfoDisk
end tell
 
Bonjour,

Le script du #13 fonctionne à la première éxécution :
Capture 1.png

Cependant, à la 2e éxécution et les suivantes, il m'affiche un message d'erreur :
Capture 2.png

Les scripts #16 et #17 renvoient le même message d'erreur ci-dessus dès la première éxécution.
J'ai quitté et relancé les applications, redémarré le poste, re-essayé les scripts du #13 #16 et #17 mais toujours le message d'erreur ci-dessus, dès la première exécution pour tous.

Le fait qu'un script fonctionne la première fois et pas les suivantes ne me semblait pas du domaine du possible...
 
Dernière édition:
bonjour,

Le fait qu'un script fonctionne la première fois et pas les suivantes ne me semblait pas du domaine du possible...
Je ne sais pas !

Sinon voilà la suite du script qui teste si il y a "fail" dans l'info
J'ai mis :
Un dialogue si "fail" et un autre si pas .
Ces dialogues seront à remplacer par l'envoi de message !
bon tests !
Bloc de code:
set infodisk to do shell script "/usr/local/bin/softraidtool status"
tell application "Finder"
    set infodisk to infodisk as string
    set nb to offset of "Fail" in infodisk
    if nb > 0 then
        display dialog "erreur disque !  " & infodisk
    else
        display dialog "on fait rien, tout est bon"
    end if
end tell
 
A ma grande surprise, l'Editeur de script n'est pas autorisé par défaut dans les Préférences Système>Sécurité et confidentialité>Accessibilité de MacOS 10.13.6. Je lui ai donc accordé les privilèges administrateur, mais sans succès.

Capture.png

Le résultat affiche :
error "
SoftRAID Tool version: 6.3, SoftRAID driver version: 6.3
The disk disk2, SN: JK1131YAGG05DV, SATA bus 0, id 0 (Bay 1) is more likely fail (based on SMART data) and should be replaced.
" number 1

J'ai donc suivi la piste de l'error 1 dans Applescript sur https://developer.apple.com/library...riptLangGuide/reference/ASLR_error_codes.html, mais, sauf erreur de lecture, elle ne semble pas répertoriée.