Comment puis-je arrêter mon Mac de force à une heure déterminée?

19

Je recherche une application d'arrêt automatique qui arrêtera de force l'ordinateur à une heure déterminée.

La partie la plus importante de cela est que l'arrêt ne doit pas être annulable (sauf si le processus est extrêmement onéreux).

Harry
la source
Qu'entendez-vous par «application»? Doit-il s'agir d'un programme GUI ou launchd (que je suggère ci-dessous) est-il acceptable? Si vous faites ce qu'est une application graphique, que voulez-vous qu'elle fasse? Demander l'heure à laquelle l'ordinateur doit être arrêté, lors de son exécution?
TJ Luoma

Réponses:

25

Ok, donc suite à ma réponse précédente, je peux vous expliquer comment obtenir cron (un service de planification UNIX intégré) pour exécuter une commande d'arrêt planifié pour vous.

Il s'exécutera en tant que root et sera forcé.

  • Terminal ouvert (/ Applications / Utilitaires / Terminal)
  • Contribution sudo crontab -e

Vous devrez entrer votre mot de passe de connexion, puis appuyez sur Entrée.

Vous serez maintenant dans un éditeur de texte (vim). Saisissez soigneusement les touches suivantes.

  • Appuyez iune fois (cela vous permettra de saisir du texte)

Supposons que vous souhaitiez que la machine s'arrête à 2 heures du matin tous les jours, nous saisissons maintenant:

* 2 * * * /sbin/shutdown -h now

Si vous souhaitez que la machine s'arrête tous les jours à 2h30, vous devez entrer:

30 2 * * * /sbin/shutdown -h now
  • Une fois que vous l'avez tapé, appuyez sur esc
  • Appuyez ensuite sur shift+ z shift+ z(c'est "z" majuscule deux fois, pour écrire les modifications et quitter l'éditeur)

Vous devriez maintenant être renvoyé à la ligne de commande où vous avez commencé.

Vous avez terminé!

macaco
la source
Tu n'as pas besoin d' sudoy mettre ? Je sais que cela provoquera probablement un blocage, mais je suis sûr que vous devez être root pour fonctionner shutdown.
daviesgeek
Aucune exception n'est nécessaire, c'est une réponse étonnante, très heureusement surpris, surtout après avoir répondu grossièrement à vous. Merci beaucoup pour votre aide
Harry
3
@daveisgeek - Vous avez tout à fait raison, mais notez que nous démarrons crontab avec sudo. Cela signifie que nous modifions la crontab de root et donc toutes les commandes planifiées seront exécutées en tant que cet utilisateur.
macaco
Hé, je l'ai fait, et à l'heure fixée, j'ai eu une boîte de dialogue qui dit, cet ordinateur va s'éteindre dans 10 minutes? Et il me demande d'annuler. Je ne sais pas si c'était le résultat du truc cron, ou du truc d'économie d'énergie que j'ai fait aussi. La chose cron est-elle censée forcer un arrêt sans une boîte de dialogue d'annulation?
Harry
3
shutdownest dans /sbinlequel n'est probablement pas dans le $ PATH par défaut de cron. Pour résoudre ce problème, sudo crontab -erecommencez, tapez ddpour supprimer la ligne (en supposant que le fichier ressemble à celui que vous avez lié ci-dessus) et entrez à nouveau la ligne sous 30 22 * * * /sbin/shutdown -h now.
nohillside
13

Il peut cependant être annulé:


Arrêtez-vous à yymmddhhmm:

shutdown -h 1109211555

Arrêt en 4 minutes:

shutdown -h +4

/Library/LaunchAgents/me.lri.forceshutdown.plist:

<?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>me.lri.forceshutdown</string>
    <key>ProgramArguments</key>
    <array>
        <string>shutdown</string>
        <string>-h</string>
        <string>now</string>

    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>23</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

Si le plist appartenait à un utilisateur normal, essayer de le charger entraînerait l'erreur launchctl: Dubious ownership on file (skipping):

sudo chown root /Library/LaunchAgents/me.lri.forceshutdown.plist

L'agent peut être chargé en se déconnectant et se reconnectant, ou avec:

sudo launchctl load /Library/LaunchAgents/me.lri.forceshutdown.plist

sudo crontab -e

`08 16 * * * /sbin/shutdown -h now`

Cela effectuerait un arrêt normal non forcé:

osascript -e 'tell app "System Events" to shut down'
Lri
la source
Lors de l'ajout de la commande shutdown à un agent launchd dans / Library / LaunchAgents /, cela n'a pas fonctionné et «console» consignait «shutdown: NOT super-user». Peut-être que cela aurait fonctionné dans / System / Library / LaunchAgents (mais vous n'êtes pas censé y mettre des choses :-)) Je n'avais besoin que d'un arrêt normal, alors je suis allé avec l'osascript et je l'ai mis dans ~ / Library / LaunchAgents /bla.shutdown.plist. A bien fonctionné.
commonpike
J'ai dû utiliser <code> osascript -e 'tell app "Finder" pour fermer' </code>
commonpike
Ceci est la seule bonne réponse. (à mon avis)
CousinCocaine
9

Cela peut être planifié dans Préférences Système> Économiseur d'énergie> Planification . Je ne suis pas certain que cela entraînera un arrêt forcé, vous devrez l'essayer. Mais c'est une option intégrée pour automatiser la mise hors / sous tension programmée.

  • Vous pouvez également arrêter de force le système avec une commande de terminal (nécessite root):

    arrêt -h maintenant

    Vous pouvez placer cette commande dans une tâche planifiée launchd ou cron . Consultez cet article pour plus d'informations sur ces deux services.

  • Vous pouvez également vouloir vérifier une application comme le bien nommé iWannaSleep (vous ne savez pas si cela force l' arrêt).

macaco
la source
Quoi...??? Je recherche une application.
Harry
2
Vous voudrez peut-être paraître moins ingrat, mais si vous relisez ma réponse, vous verrez que je recommande une application et si vous faites une petite recherche indépendante, vous verrez qu'il y a en fait quelques autres applications qui ont cette capacité!
macaco
iWannaSleep est le premier résultat que les gens recommandent sur Google, et il ne fait pas ce que je veux. Et vous me recommandez d'apprendre quelque chose d'unix pour éteindre l'ordinateur?
Harry
3
Je le recommande car c'est un moyen efficace d'atteindre ce que vous voulez en utilisant des outils intégrés. Si vous ne parvenez pas à trouver une application qui convient à vos besoins, vous devrez peut-être chercher quelque chose dans le sens de ma suggestion.
macaco
1
Energy Saver »Schedule n'est pas une bonne réponse, car il invitera l'utilisateur 10 minutes avant l'arrêt et proposera d'annuler le processus.
TJ Luoma
3

Vous pouvez utiliser shutdowndirectement pour planifier un arrêt à tout moment dans le futur:

shutdown -h time

où heure spécifie une heure future dans l'un des deux formats: + nombre ou yymmddhhmm, où l'année, le mois et le jour peuvent être définis par défaut sur les valeurs système actuelles. La première forme fait descendre le système en nombre de minutes et la seconde à l'heure absolue spécifiée.

nohillside
la source
2
cd ~/Downloads/

curl --remote-name http://dl.dropbox.com/u/18414/ase/com.tjluoma.forceshutdown.plist

# voir note ci-dessous

sudo mv com.tjluoma.forceshutdown.plist /Library/LaunchAgents

sudo chown root:wheel /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

sudo launchctl load /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

Remarque:

Tel qu'écrit, le plist entraînera l'arrêt de l'ordinateur à 23h (heure locale) tous les jours.

Si vous souhaitez modifier l'heure, modifiez le script dans n'importe quel éditeur de texte. Modifiez les touches Heure et Minute, extraites ici:

<dict>
    <key>Hour</key>
    <integer>23</integer>
    <key>Minute</key>
    <integer>0</integer>
</dict>

(notez l'utilisation du temps de 24 heures)

TJ Luoma
la source
2

Arrêt planifié plus agréable

Si vous souhaitez arrêter votre Mac en toute sécurité à une heure planifiée, pensez à Power Manager ; il s'arrête bien sans laisser les applications bloquer le processus:

  • Tous les utilisateurs actifs reçoivent une notification suffisante.
  • Un grand avertissement s'affiche peu de temps avant le début de l'arrêt.
  • Les applications en cours d'exécution sont invitées à quitter.
  • Les applications ignorant la belle demande sont fermées plus fermement.
  • La déconnexion est laissée pour se terminer, avant que le Mac ne soit finalement arrêté.

Il est très difficile pour une application ou un processus non autorisé de bloquer ces étapes.

Pourquoi pas shutdown

L'utilisation shutdownforcera la fermeture de tous les processus sur votre Mac, y compris les applications graphiques. Pour de nombreuses applications, il s'agit d'un comportement agressif et ne donne pas à l'application beaucoup de possibilités d'enregistrer l'état ou les données.

Assistant de planification

Power Manager inclut une tâche Assistant Planification pour arrêter un programme .

Power Manager - éteindre la tâche quotidienne

Divulgation: je travaille avec l'entreprise qui fabrique Power Manager.

Graham Miln
la source
0

Je jetterais un œil à cette note technique d'Apple

Samantha Catania
la source
Merci, que dois-je faire maintenant?
Harry
vous pouvez utiliser SendAppleEventToSystemProcess (kAEShutDown), puis vous pouvez utiliser la commande killall -u username pour tuer toutes les applications (puisque vous ne voulez pas qu'il soit annulable), vous pouvez également consulter la classe de la minuterie: developer.apple.com/library/ mac / # documentation / Cocoa / Reference /…
Samantha Catania
1
Excellent article, mais OP hésitait à utiliser cron ou launchd, je doute qu'il cherche à coder sa propre solution à ce problème.
macaco
1
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
daviesgeek