Comment créer un AppleScript qui quittera une application à un moment précis et mettra ensuite l'ordinateur en veille?

8

J'ai joué avec AppleScript et Automator pour faire fonctionner cette chose, mais je ne peux pas sembler envelopper la tête. Si quelqu'un pouvait me montrer un exemple ou me donner quelques conseils sur la façon de configurer une application pour qu'elle se ferme à une heure précise, puis de mettre l'ordinateur en veille ou à l'arrêt, ce serait grandement apprécié.

Tomás Richardson
la source
Souhaitez-vous que cela soit fait régulièrement ou est-ce quelque chose que vous souhaitez lancer manuellement?
ephsmith
Avez-vous déjà écrit l'AppleScript?
ephsmith
C'est quelque chose que j'aimerais faire régulièrement et ne pas avoir à me soucier de l'initier. J'avais un script écrit mais c'était assez salissant alors je l'ai mis à la poubelle et je me suis retrouvé ici. Merci pour votre réponse. Je vais essayer et j'espère que cela clarifiera les problèmes que j'ai rencontrés.
Tomás Richardson
si vous voulez que cela se fasse régulièrement, alors la planification du travail atn'est pas ce que vous voulez. cronou launchd. Si vous voulez une interface plus facile à configurer, peut-être que lingon 3 vous aidera.
ephsmith

Réponses:

14

Je suppose que vous souhaitez lancer cette procédure plutôt que de l'exécuter à une heure régulièrement planifiée.

Mon approche serait d'initier cela à partir de la ligne de commande, mais toutes les commandes peuvent être exécutées dans un composant de script shell d'un script Automator avec quelques modifications. L'approche suivante combine quelques composants pour faire le travail:

  1. Une tellcommande pour quitter l'application
  2. Un appel en ligne de commande pour mettre l'ordinateur en veille
  3. Un appel en ligne de commande pour planifier 1 et 2 pour une heure spécifique.

1. Dire à l'application de quitter

Cela peut être aussi simple que:

osascript -e 'tell application "AppName" to quit'

2. Mettre l'ordinateur en veille

Jetez un oeil à pmsetpour plus de détails, mais l'exécution de la commande suivante mettra votre ordinateur en veille:

pmset sleepnow

3. Planification d'une opération à exécuter à un moment précis

Jetez un œil à la commande at . Cette commande vous donne la possibilité de spécifier une heure pour l'exécution d'une commande. Vous devrez activer cette fonctionnalité car elle ne l'est pas par défaut. Pour activer le atrundémon, exécutez la commande suivante [référence sur SU] :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Une fois que vous avez activé atrun, toute commande peut être planifiée à une heure spécifique en émettant

echo "<command>" | at HH:MM

qui fonctionne car atprend son entrée stdinpar défaut. Une approche plus simple consiste à exécuter les commandes répertoriées dans un fichier. Un fichier peut être exécuté en utilisant l' -findicateur, suivi du nom du script à exécuter comme ceci:

at -f /path/to/file HH:MM

Mettre tous ensemble

Ce qui suit suppose que cette option atrunest activée. À titre d'exemple de jouet, disons que je veux quitter Mail et mettre l'ordinateur en veille à 23 heures. Je créerais un fichier contenant les commandes que je veux exécuter comme suit:

osascript -e 'tell application "Mail" to quit'
pmset sleepnow

Enregistrez ce fichier dans quit-and-sleep, puis exécutez-le sur la ligne de commande

at -f /path/to/quit-and-sleep 23:00

Avertissements

Je n'ai fait aucune vérification pour m'assurer que Mail était bien fermé. Le script suppose également que rien d'autre n'empêchera l'ordinateur de s'endormir. Je l'ai gardé simple ici comme point de départ pour ce que vous voulez.

ephsmith
la source
1

Voici une version strictement applescript qui accomplit cela étant donné une valeur de temps codée en dur. Vous pouvez bien sûr rendre cette partie interactive si vous le souhaitez. De plus, cette version suppose que la chaîne temporelle se rapporte à aujourd'hui.

--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)

repeat while (current date) < targetTime
    beep
    delay 30 -- check the time every 30 seconds
end repeat

tell application "Mail"
    quit
end tell

tell application "Finder"
    display dialog "Do you want to shut the computer down now?"
    if button returned of the result is "Ok" then
        shutdown
    end if
end tell
Paul Skinner
la source
1

Vous pouvez planifier un événement une fois avec à:

at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'

Ou pour planifier sa répétition tous les jours, modifiez le crontab avec EDITOR=nano crontab -eet ajoutez une entrée comme celle-ci:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
Lri
la source
à 23:59 <<< 'osascript -e "quitter l'application \" Mail \ ""; pmset sleepnow 'ne fonctionne pas pour moi. Il dit "job 1 au sam 30 avril 12:47:00 2016" mais n'exécute pas la commande le moment venu
oluckyman
0

Voici du code qui attendra quelques secondes avant de quitter l'application actuelle et de se mettre en veille.

delay (your amount of seconds here)
tell application "System Events"
    key down {command}
    keystroke "q"
    key up {command}
    set volume "1"
    say "computer going to sleep"
    tell application "Finder"
        sleep
    end tell
end tell
imagophereatingapickle
la source