SoftRaid 6.3, AppleScript et Terminal

Pour varier les plaisirs, je suis passé d'un poste en 10.13.6 à un autre en 12.7, et là tous les scripts du #13, #16, #17 et #19 fonctionnent. A savoir que j'ai également modifié les autorisation d'accès de l'Editeur de script ET sh (qui n'était pas dans 10.13.6) :
Capture.png

"sh" a l'icône du terminal sans en porter le nom. Qu'est que c'est ?
 
Je suppose que la commande est reconnue en shell "zsh" et pas en "bash" suivant le terminal utilisé.

Et donc le résultat du script #19 ?
 
Dernière édition:
Mais dans le message #1 il y a aussi cette erreur dans le Terminal, sur la deuxième copie d'écran ?
Dans le message #1, j'avais écris un script qui ne faisait qu'ouvrir le Terminal pour lancer la commande softraidtool status.
Et le résultat dans Applescript était :
error "Erreur dans Terminal : Impossible de convertir tab 1 of window id 4028 en type string." number -1700 from tab 1 of window id 4028 to string

Je n'avais inséré que des copies d'écran du Terminal. Ou alors je n'ai pas compris ta question.

Je suppose que la commande est reconnue en shell "zsh" et pas en "bash" suivant le terminal utilisé.

Et donc le résultat du script #19 ?
Si seulement je savais faire la différence entre un shell "zsh" et un "bash"...

Résultat du script #19 : j'ai parlé un peu vite...

Avec MacOS 12.7, lorsque tous les disque sont sans erreur : le script fonctionne correctement :
Capture 2.png

Mais lorsqu'un des disques présente des erreurs, cette "error number 1" est de retour :
Capture 3.png
 
Si seulement je savais faire la différence entre un shell "zsh" et un "bash"...
C'est écrit dans la barre de la fenêtre du terminal.
Jusqu'a "Mojave" 10.14 le terminal par défaut était un shell "bash", les systèmes suivant on un shell "zsh".

si besoin, on peut changer le shell par défaut dans les préférences du terminal

Tes essais ont été fait avec un ordinateur sous quel système ?
Si c'était en 12.7 le shell devait être "zsh"
auquel cas essai avec un ordi sous hight sierra 10.13 dont le shell est en "bash"

Si toujours la même chose , on essayera de traiter l'erreur comme étant un retour de disque défaillant...
 
Dernière édition:
En supposant que tu n'ais pas réussi à résoudre le problème, je te joint un script a essayer.
Vu que lorsque il n'y a pas d'erreur disque le script fonctionne sans erreur, je traite les erreurs du script comme une erreur disque.
Si cela fonctionne il faudra alors changer le dialogue par l'envoi d'un mail ou message !

J'attends ton retour

Bloc de code:
tell application "Finder"
    set nb to 0
    set infodisk to ""
    try
        set infodisk to do shell script "/usr/local/bin/softraidtool status"
        set infodisk to infodisk as string
        set nb to offset of "Fail" in infodisk
        
        if nb = 0 then
            display dialog "on fait rien, tout est bon"
        end if
        
    on error messaError from f to t partial result p
        display dialog "erreur disque !  " & messaError
    end try
end tell
 
Avec le script #19 sur 10.13.6, le script fonctionne comme avec 12.7 :
Pas de problème de disque, le script fonctionne correctement :
Capture Ok.png

Avec problème de disque, erreur numéro 1 :
Capture Fail.png

Entre deux messages, je cherche également sur d'autres pistes pour collecter correctement l'info SMART et envoyer un message d'alerte en cas de problème de disque et/ou de volume, avec SMART Utility ou DriveDx par exemple. Il y a aussi gsmartcontrol.shaduri.dev, mais là on rentre dans la manipulation du Terminal et je suis largué.

Je te donne le retour du scipt #26 dans le message suivant, et après je propose de reparler de tout cela lundi.
Comme je te le disais en #10, tu peux aussi avoir une version full de Softraid 6.3 pendant 14 jours sur software.owc.com/support/softraid/

Reste à savoir sur quel système tu navigues :
Softraid versions.png

Un certain nombre de discussions sur ce forum tournent autour de SoftRaid. S'il y a une solution qui sort, je pense que cela va intéresser beaucoup d'utilisateurs, ici et ailleurs, car aucun des logiciels d'info SMART n'a de système d'alerte par SMS.
Seuls Softraid 5.x et 8.x, ainsi que DriveDx ont un système d'alerte par email.
 
Voilà le résultat avec ton script #26

Sur 10.13.6, sans problème de disque :
Capture 10.13 Ok.png

Sur 10.13.6, avec problème de disque :
Capture 10.13 Fail.png

Sur 12.7, sans problème de disque :
Capture 12.7 Ok.png

Sur 12.7, avec problème de disque :
Capture 12.7 Fail.png

L'error number 1 a disparue. Le script semble fonctionner correctement : mes félicitations.

Lundi, je regarderais de plus près le Cron pour installer une boucle. Merci et bonne nuit.
 

Fichiers joints

  • Capture 12.7 Fail.png
    Capture 12.7 Fail.png
    107,6 KB · Affichages: 1
  • Capture 10.13 Fail.png
    Capture 10.13 Fail.png
    82,9 KB · Affichages: 0
  • Capture 12.7 Fail.png
    Capture 12.7 Fail.png
    107,6 KB · Affichages: 0
Dernière édition:
Bon ! alors pour la suite, il faut:
-supprimer tout ce qui est dialogue
-A la place du dialogue d'erreur, programmer l'envoi d'un mail (je suppose avec l'application mail d'apple).
-Faire les essais afin de vérifier que tout fonctionne
-Enregistrer le script en tant qu'application
-Programmer pour que l'application se lance toutes les heures, pour cela 2 possibilités: soit avec "calendrier"( très simple !) soit en programmant un "cron" dans le système, je te ferai un petit tuto pour la mise en place.
 
Voila donc le script qui envoi un mail avec l'application "mail" d"apple, lorsqu’il y a une erreur.
Et le processus de mise en place.
Bloc de code:
tell application "Finder"
    set nb to 0
    set infodisk to ""
    try
        set infodisk to do shell script "/usr/local/bin/softraidtool status"
        set infodisk to infodisk as string
        set nb to offset of "Fail" in infodisk
       
    on error messaError from f to t partial result p
       
        tell application "Mail"
            set newMessage to make new outgoing message with properties {subject:"SoftRaid erreur", content:"Erreur disque !  " & messaError}
            tell newMessage
                set toaddresslist to {"[email protected]"}
                make new to recipient at end of to recipients with properties {address:toaddresslist}
            end tell
           
            send newMessage
        end tell
       
    end try
end tell
Dans ce script:
- tu remplaces « [email protected] » par ton adresse mail
-Tu enregistres le script : menu—> fichier (avec touche option )—>Enregistrer sous…, tu choisis format de fichier : Application et tu te choisis un nom pour ton appli (évite les espaces ! ) dans mon exemple j’ai mis « Erreur_disque » et choisis comme destination le dossier Applications.

-Tu peux déjà essayer en lançant l’application par un simple double-clic

Lors du 1ere lancement de l’application,
Donner les autorisations à l’application et à mail .

Si tout fonctionne , alors on passe à la programmation

une solution Avec l'application "Calendrier"
Tu peux, si tu veux, créer un calendrier spécifique pour çà !

1 - Tu crées un évènement dans calendrier (il faudra faire un évènement par heure ou tu veux que l’application se lance)
2 - Tu cliques sur la date, tu paramètres: commence, se termine etc...
3 - Tu cliques sur" alerte aucune", tu sélectionnes personnaliser ...
3 - A la place de message tu choisis "ouvrir le fichier"
4 - A la place de calendrier tu choisis "Autre..." et tu sélectionnes ton application
5 - Tu choisis au moment de l'évènement pour exécuter ton application
6 - Tu cliques sur "OK"
7 - Récurrence tu choisis personnaliser et tu sélectionnes les jours ou tu veux lancer l’application puis toutes les semaines.

A répéter pour chaque heures ou l’appli doit être lancée

Autre solution avec un "Cron"
Tu ouvres le terminal, dans la fenêtre du terminal tu tapes
env EDITOR=nano sudo crontab -e
une demande de mot de passe , tu le tapes en aveugle (rien ne s’affiche à l’écran) et tu valides avec enter.

Tu es dans l’application minimaliste Nano

Là tu entres ta commande au format :
minute (entre 0 et 59)
heure (entre 0 et 23)
jour (entre 1 et 31)
mois (entre 1 et 12)
jour semaine (entre 0 et 6 —> 0 = dimanche)
Commande à exécuter (exemple pour ouvrir une application, open Chemin_application)

Chaque valeur étant séparée par un espace
Dans les valeurs une * = tous
plusieurs valeurs à séparer par une virgule
Une série —> début-fin

Donc tout est sur une seule ligne.
Bien sur dans les exemples ci-dessous tu remplaces le nom de mon application "erreur_disque.app" par le nom de ton appli...

exemple pour toutes les heures, de 10h à 16h, les lundi, jeudi et vendredi ouvrir l'application "erreur_disque"
0 10-16 * * 1,4,5 open /Applications/erreur_disque.app

Autre exemple pour toutes les heures de 10h00 à 17h00, tous les jours du mois (du 1 au 31), tous les mois (de 1 à 12), du lundi au vendredi
0 10-17 * * 1-5 open /Applications/erreur_disque.app

Pour enregistrer cette commande faire ctrl+o puis enter
Puis ctrl+x pour quitter nano

Dans le terminal Tu devrais avoir la confirmation: “installing new crontab

Voilà j'attends le retour...
 
Dernière édition:
Je n'ai pas précisé, mais si tu préfères envoyer un imessage à la place d'un mail, fait- moi signe je te ferais la modification du script !

Mis en place et testé chez moi, tout fonctionne !
 
Dernière édition:
Merci pour le tuto avec l'utilisation de Mail et la création d'une boucle.
Un premier coup d'oeil me laisse à penser que la méthode calendrier sera plus souple, ne serait-ce que pour éviter de passer par le Terminal.

Avant cela, je vais intégrer l'envoie d'un message d'alerte SMS, car cela correspond mieux à l'urgence d'un disque dur en difficulté sur un RAID 5 en 16 unités de 20To, par exemple.

J'avais donc un script "de base" qui fonctionnait correctement sur 10.13.6 :
tell application "Messages"
set targetService to first service whose service type = iMessage
set targetBuddy to first buddy of targetService whose name is "Administrateur"
send "Softraid affiche une erreur." to targetBuddy
end tell

Mais pas sous 12.7 :
Capture 12.7.png

J'ai également découvert sous 10.13.6 que si "Administrateur" n'a pas de conversation en cours sur Message, le script ne fonctionne pas.
J'ai donc inséré le numéro de portable de l'administrateur dans le script, selon plusieurs syntaxes :
tell application "Messages"
set targetService to first service whose service type = iMessage
set targetBuddy to "0600000000"
send "Softraid affiche une erreur." to targetBuddy
end tell

Sans succès en 10.13.6 :
Capture 10.13.6.png

Et avec une autre erreur sous 12.7 :
Capture 12.7-1.png

J'ai donc tenté d'aller chercher le numéro de portable de l'Administrateur dans une fiche créée dans Contacts, mais c'est rapidement devenu compliqué et non fonctionnel.
 
Bonjour essai avec ce script !
A remplacer "NUMERO TEL OU ADRESSE MAIL" soit par le numéro de tel soit par l'adresse mail associée.

Bloc de code:
tell application "Finder"
    set nb to 0
    set infodisk to ""
    try
        set infodisk to do shell script "/usr/local/bin/softraidtool status"
        set infodisk to infodisk as string
        set nb to offset of "Fail" in infodisk
       
    on error messaError from f to t partial result p
       
        tell application "Messages"
            set targetBuddyPhone to "NUMERO TEL OU ADRESSE MAIL"
            set targetMessage to "Erreur disque !  " & messaError
            set targetService to 1st account whose service type = iMessage
            set targetBuddy to participant targetBuddyPhone of targetService
            send targetMessage to targetBuddy
        end tell
       
    end try
end tell
 
J'ai pris la liberté de modifier cette ligne :
set targetBuddy to participant of targetBuddyPhone of targetService

Sous 10.13.6 :
Capture 10.13.6.png

Sous 12.7 :
Capture 12.7.png
 
je ne comprend pas !
chez moi aucun problème
Pourquoi modifier la ligne??? la ligne que je te donne est bonne ...
Le mot "participant" n'est pas une variable mais un mot clef et doit donc apparaître en bleu dans le code !

le script ci dessous envoie juste le message !
Fait un essai en ne changeant que le n° de tel
Bloc de code:
tell application "Messages"
    set targetBuddyPhone to "06xxxxxxxx"
    set targetMessage to "Erreur disque !  "
    set targetService to 1st account whose service type = iMessage
    set targetBuddy to participant targetBuddyPhone of targetService
    send targetMessage to targetBuddy
end tell
 
Dernière édition:
J'ai modifié la ligne parce-que sous 10.13.6, l'Editeur de script refuse la formule :
Capture 10.13.6.png

Je vois que tu es sous 10.14.6 et 14.3. Il y a peut-être des différences avec 10.13.6 et 12.7... Car effectivement, ton script #35 fonctionne parfaitement sous 12.7 et pas le mien avec "to" en plus.

Bon, je vais devoir prendre une décision radicale et tout passer en 12 minimum pour gérer le stockage : gros boulot en prespective.
 
Et donc, ton script #33 fonctionne parfaitement sou 12.7 : super !

En passant, il y a une ligne qui m'intrigue :
on error messaError from f to t partial result p

Pourrais-tu me l'expliquer en quelques mots ?
 
on error messaError from f to t partial result p
Comme expliqué avant, lorsque ton disque est en erreur la commande "softRaidtool status" retourne une erreur, donc quand il y a cette erreur je récupère avec cette ligne le texte renvoyé par l'erreur !

Bref !
Je te joins un autre script qui envoi le imessage qui devrait fonctionner sur 10.13.6
bon tests !

Bloc de code:
tell application "Finder"
    set nb to 0
    set infodisk to ""
    try
        set infodisk to do shell script "/usr/local/bin/softraidtool status"
        set infodisk to infodisk as string
        set nb to offset of "Fail" in infodisk
        
    on error messaError from f to t partial result p
        
        tell application "Messages"
            set targetbuddy to "06xxxxxxxx"
            set imessageservice to 1st account whose service type = iMessage
            set textMessage to "Erreur disque !  " & messaError
            set imessagebuddy to participant targetbuddy of imessageservice
            send textMessage to imessagebuddy
        end tell
        
    end try
end tell

J'attend ton retour !
 
Désolé,
Testé chez moi sous 10.14 "Mojave", je n'ai pas de système inférieur à çà !
sur "Mojave" pas de problème...

Je vais continuer mes recherches ! Mais c'est quand même curieux !