Script d'avertissement d'uptime

Bassman

Membre vénérable
Club iGen
12 Septembre 2003
17 073
2 420
45
Hello,

Voilà, je cherche à écrire un script pour que mes chers utilisateurs soient averti que leur uptime dépasse les limites de l'entendement.

Mais mes connaissances dans ce domaine sont limitées, j'ai regardé du côté d'automator, qui me permet bien de récupérer la variable équivalente à "uptime" dans le terminal, mais je ne sais pas comment l'exploiter.

Mettre en place le launchd pour que le script se lance régulièrement, aucun soucis, mais ce script en lui même… je sais pas faire.

Quelqu'un pour me donner un coup de main (applescript, shell, automator) peut m'importe la méthode, du moment que je puisse la lancer dans mon daemon derrière.

Merci d'avance :)
 
Hello,

Voilà, je cherche à écrire un script pour que mes chers utilisateurs soient averti que leur uptime dépasse les limites de l'entendement.

Mais mes connaissances dans ce domaine sont limitées, j'ai regardé du côté d'automator, qui me permet bien de récupérer la variable équivalente à "uptime" dans le terminal, mais je ne sais pas comment l'exploiter.

Mettre en place le launchd pour que le script se lance régulièrement, aucun soucis, mais ce script en lui même… je sais pas faire.

Quelqu'un pour me donner un coup de main (applescript, shell, automator) peut m'importe la méthode, du moment que je puisse la lancer dans mon daemon derrière.

Merci d'avance :)
Bonjour

Bloc de code:
on idle
	set UT to (do shell script "uptime") as string -- Lecture des données
	set {myTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {space}}
	set msg to word 4 of UT -- Nombre de jours
	set AppleScript's text item delimiters to "up"
	set UpT to words 1 thru 4 of text item 2 of UT -- Les données à afficher
	tell UpT to set temps to item 1 & space & " Jours" & " " & item 3 & " heures et " & item 4 & " minutes."
	-- Alerte
	tell me to activate
	-- Si plus d'un jour alors alerte
	if msg > 1 then display dialog temps as string buttons {"OK"} default button 1 with title "Alerte Uptime" giving up after 15
	set AppleScript's text item delimiters to myTID
	return 5
end idle

Fait à la va-vite, testé sur Léopard 10.5.8 En progiciel en tache de fond.

A toi de voir ci cela peut être utile et le modifier suivant ta convenance.

@+
 
Ah ouais… :D

Merci beaucoup ! J'essaye ça lundi au boulot :)
 
Ah ouais… :D

Merci beaucoup ! J'essaye ça lundi au boulot :)
Bonsoir

Teste le code tel qu'il est pour voir si cela correspond à tes attentes.

Copier-Coller ce code dans Applications/AppleScript/Éditeur de sripts.
Bouton compiler, si le texte prend des couleurs c'est bon.

Barre des menus/Fichiers/Enregistrer sous…
Donner un nom

Sélectionner le bureau comme dossier de réception (pour le test).
Format de fichier = Progiciel (pour être compatible PPC et intel).
Option = rester en arrière plan seulement de coché.

Un double clic sur cette application et si plus d'un jours Uptime donc alerte.

Bon test.

Cordialement
 
J'en profite : que veut dire "on idle" ?
Merci.
Bonjour

Option = rester en arrière plan seulement de coché permet de ne rien voir lorsque cette application fait ses contrôles.

on idle est la commande qui fait tourner en boucle cette application.
Il faut la fermer pour l'arrêter.

return 5 est la temporisation (en secondes) avant de passer au contrôle suivant, donc à régler par l'utilisateur.

Donc on idle n'est utilisé qu'avec les applications travaillant en tache de fond (invisible)

@+
 
ok, dans la mesure ou je ferais appel à ce script par un launchd, tous les mardi à priori, je pourrais supprimer la boucle qui l'exécute en permanence en tâche de fond.
 
Pour voir si j'ai bien compris : dans ce cas, est-ce juste de dire que "on idle" permet de faire d'une application un démon "daemon" tournant en tâche de fond ?
 
  • J’aime
Réactions: ceslinstinct
ok, dans la mesure ou je ferais appel à ce script par un launchd, tous les mardi à priori, je pourrais supprimer la boucle qui l'exécute en permanence en tâche de fond.
Bonjour

On idle utilisé juste pour voir le fonctionnement sur mon ordinateur, puisque toi tu en as pas besoin.

Il suffit qu'un quelconque programme démarre ce code.

Normalement iCal devrais pouvoir te le lancer tous les Mardi (j'utilise pas iCal donc non testé).

Tu supprime:
On idle
return 5
end idle


Pour voir si j'ai bien compris : dans ce cas, est-ce juste de dire que "on idle" permet de faire d'une application un démon "daemon" tournant en tâche de fond ?
Tu as tout compris.

@+
 
  • J’aime
Réactions: Clarusad

Bassman Pourquoi au bas de tes messages tu as les 3 boutons citer, etc en double et que la commande Citer du haut envoie sur http://www.vesoul.fr/

Je ne trouve ça qu'avec toi, simple curiosité.

@+
 
Héhé :)

C'est un piège :D
 
Bonsoir

Ce que j'ai oublié de dire, c'est une application si l'on supprime ces 3 lignes du code.

On idle
return 5
end idle


@+
 
Je suis en train de tester tout ça.

Mon macpro est à 2j 17h56 et des bananes d'uptime.
Si je laisse "if msg > 1", j'ai bien la boite de dialogue qui apparaît. En revanche, si je mets "if msg > 2", il n'apparaît plus… Quelque chose que je n'ai pas compris ?

Même chose sur un serveur avec 122j d'uptime :heu:

Cela fonctionne si je mets 1, 10 ou 100, mais pas avec d'autres chiffres
 
Je suis en train de tester tout ça.

Mon macpro est à 2j 17h56 et des bananes d'uptime.
Si je laisse "if msg > 1", j'ai bien la boite de dialogue qui apparaît. En revanche, si je mets "if msg > 2", il n'apparaît plus… Quelque chose que je n'ai pas compris ?

Même chose sur un serveur avec 122j d'uptime :heu:

Cela fonctionne si je mets 1, 10 ou 100, mais pas avec d'autres chiffres
Bonjour

Teste avec cette façon, il y a sans doute un problème avec un entier et un string.
Tu n'utilise pas les guillemets dans if msg > 2
Bloc de code:
if (msg as integer) > 1 then display dialog temps as string buttons {"OK"} default button 1 with title "Alerte Uptime" giving up after 15

Si une erreur c'est que la variable n'est pas un entier.

Tu es en 10.5.6 (je l'ai pas donc non testé?)

Chez moi ça marche très bien en application.

Teste en application et après avec ton démon pour voir si une différence.

Tu me tien au courant?

@+
 
C'était donc bien un problème d'entier, avec
Bloc de code:
if (msg as integer) > …
celà fonctionne parfaitement.

Environnement de test : 10.5.2 à 10.5.8
 
C'était donc bien un problème d'entier, avec
Bloc de code:
if (msg as integer) > …
celà fonctionne parfaitement.

Environnement de test : 10.5.2 à 10.5.8
Bonjour

J'ai réécrit le code (en application donc utilisable par toi) pour que tu comprenne bien le fonctionnement.

Bloc de code:
on run
	set uptime_ to do shell script "uptime" as string -- Lecture de l'Uptime
	
	-- Mise en mémoire du délimiteur et prise en compte du nouveau Délimiteur espace pour trouver les 2 variables nécessaire au code
	set {myTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {space}}
	-- Initialisation des variables
	set {temps, nbrJours} to {item 1 of text items of uptime_ as text, item 4 of text items of uptime_ as text}
	set AppleScript's text item delimiters to "" -- Retour au délimiteur mis en mémoire
	
	tell me to activate -- Pour être sur que la fenêtre d'alerte seras en premier plan
	-- Alerte
	if (nbrJours as integer) > 1 then display dialog nbrJours & " Jours et " & temps as string buttons {"OK"} default button 1 with title "Alerte Uptime" giving up after 15
end run

A toi de tester et faire ton choix.:)

Excuse moi si trop de commentaires, c'est juste pour expliquer ce que font chaque lignes du code.
Il suffit de les effacer, et le code fonctionne toujours.;)

Cordialement:D:D:D
 
Merci beaucoup.


Un truc qui chagrine mon collègue, c'est de voir l'icône d'une application passer dans le dock puis disparaître (si l'uptime est inférieur à la valeur limite). Sauver l'applescript en script est suffisant ?
 
Merci beaucoup.


Un truc qui chagrine mon collègue, c'est de voir l'icône d'une application passer dans le dock puis disparaître (si l'uptime est inférieur à la valeur limite). Sauver l'applescript en script est suffisant ?
Si tu utilise on idle le code reste ouvert jusqu'à tu le quitte.
C'est lui qui décide de ne pas quitter car avec la temporisation Return il doit faire d'autres contrôles.

Si tu passe par un démon autre que on idle, c'est normal que le code quitte.
Il seras ouvert a la prochaine demande du démon pour contrôle.
C'est ton démon qui décide quand il faut appeler l'application, faire son contrôle si nécessaire t'avertir et quitter.

Si l'application ne doit travailler que le Mardi, c'est pas nécessaire qu'elle reste ouverte.

Donc à utiliser en application (progiciel pour être compatible PPC et intel).

@+
 
Oui et non, on s'est pas compris je crois.

Mon collègue souhaite que le controle soit fait avant et sans qu'une application s'ouvre dans le dock.

Voici le scénario :

Bloc de code:
                     Daemon qui se lance
                                /\
Uptime trop long                            Uptime correct
         |                                         |
lancer app d'averto                         Ne rien faire

Mais là, on sort forcément d'un applescript pour la première partie : le contrôle du temps d'uptime.
(L'affichage, donc le traitement du temps d'uptime reste intéressant pour l'applescript tout de même)

---------- Nouveau message ajouté à 14h26 ---------- Le message précédent a été envoyé à 14h25 ----------

Qu'il est con ce vBulletin… :rolleyes: