如何在指定的时间强行关闭Mac?


19

我正在寻找一个自动关机应用程序,它将在指定的时间强行关闭计算机。

其中最重要的部分是不应取消关机(除非该过程非常繁琐)。


您所说的“应用程序”是什么意思?它必须是GUI程序还是可以启动(我在下面建议)?如果您执行GUI应用程序,那么您希望它做什么?提示何时应该关闭计算机,何时运行?
TJ Luoma

Answers:


25

好的,关于我的上一个答案,我可以引导您逐步完成cron(UNIX计划服务的内置功能)为您运行计划的关闭命令。

它会以root身份运行,并将被强制执行。

  • 开放终端(/应用程序/实用程序/终端)
  • 输入值 sudo crontab -e

您需要输入登录密码,然后按Enter。

您现在将处于文本编辑器(vim)中。仔细输入以下击键。

  • 按下i一次(这将允许您输入文本)

假设您想让机器每天凌晨2点关闭,我们现在输入:

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

如果您想让机器每天凌晨2:30关机,请输入:

30 2 * * * /sbin/shutdown -h now
  • 输入后,请按 esc
  • 然后按shift+ z shift+ z(大写的“ z”两次,以写入更改并退出编辑器)

现在,您应该回到开始的命令行。

你完成了!


您不需要放在sudo那里吗?我知道这可能会导致它挂断,但是我很确定您必须是root用户才能运行shutdown
daviesgeek 2011年

无需例外,这是一个了不起的答案,很高兴地感到惊讶,尤其是在我粗鲁地回答了您之后。非常感谢您的帮助
哈利

3
@daveisgeek-您完全正确,但是请注意,我们使用sudo启动crontab。这意味着我们正在编辑root的crontab,因此其中的任何计划命令都将以该用户身份执行。
Macaco 2011年

嘿,我这样做了,在约定的时间,我收到一个对话框,说这台计算机将在10分钟后关闭?它要求我取消。我不知道那是cron的结果,还是我也做的节能的结果。cron的事情是否应该在没有取消对话框的情况下强制关闭?
哈里

3
shutdown/sbin这可能不是在cron的默认$ PATH。要解决此问题,请sudo crontab -e再次执行该操作,键入dd以删除该行(假设文件看起来像您上面链接的那个),然后将行重新输入为30 22 * * * /sbin/shutdown -h now
nohillside

13

可以取消它:


停在yymmddhhmm

shutdown -h 1109211555

在4分钟内停止:

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>

如果plist由普通用户拥有,则尝试加载它会导致错误launchctl: Dubious ownership on file (skipping)

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

可以通过注销然后重新登录或使用以下命令来加载代理:

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

sudo crontab -e

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

这将执行正常的非强制关闭:

osascript -e 'tell app "System Events" to shut down'

当将shutdown命令添加到/ Library / LaunchAgents /中的已启动代理时,该命令不起作用,并且'console'将记录'shutdown:NOT super-user'。也许这可以在/ System / Library / LaunchAgents中工作(但您不应该在这里放东西:-))我只需要正常关闭,所以我使用了osascript,并将其放在〜/ Library / LaunchAgents中/bla.shutdown.plist。很好
commonpike 2012年

我不得不使用<code> osascript -e'告诉应用“ Finder”关闭” </ code>
commonpike 2012年

这是唯一正确的答案。(我认为)
CousinCocaine

9

可以在“ 系统偏好设置”>“节能器”>“调度”中进行调度。我不确定这将启动强制关机,您必须尝试一下。但这是一个内置选项,可以自动执行计划的掉电/上电操作。

  • 您也可以使用终端命令强制关闭系统(需要root):

    立即关闭-h

    您可以将该命令放入启动cron计划的任务中。请查看本文,以获取有关这两种服务的更多信息。

  • 您可能还想签出一个应用程序,如恰当命名的iWannaSleep(不确定是否强制关闭)。


什么...???我正在寻找一个应用程序。
哈里

2
您可能希望显得不太忘恩负义,但是如果您重新阅读我的回答,您会发现我推荐了一个应用程序,并且如果您进行了一些独立的研究,您会发现实际上还有更多具有此功能的应用程序!
Macaco 2011年

iWannaSleep是人们在Google上推荐的第一个结果,它不能满足我的要求。而且,您建议我学习一些Unix知识来关闭计算机?
哈里

3
我推荐它是因为它是使用内置工具实现所需目标的有效方法。如果您找不到适合您需求的应用程序,那么您可能需要根据我的建议进行查找。
Macaco 2011年

1
计划时间表不是一个好的答案,因为它会在关机前10分钟提示用户并提出取消该过程。
TJ Luoma

3

您可以shutdown直接使用它在将来的任何给定时间安排关机:

shutdown -h time

其中time以以下两种格式之一指定将来的时间:+ number或yymmddhhmm,其中年,月和日可以默认为当前系统值。第一种形式以分钟为单位关闭系统,第二种形式以指定的绝对时间关闭。


2
cd ~/Downloads/

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

#参见下面的注释

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

注意:

按照书面说明,plist将导致每天每天晚上11点(本地时间)关闭计算机。

如果要更改时间,请在任何文本编辑器中编辑脚本。更改小时和分钟键,摘录如下:

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

(注意使用24小时制)


2

更好的预定关机

如果要在计划的时间安全关闭Mac,请考虑使用Power Manager;它可以很好地关闭,而不会阻止应用程序阻塞进程:

  • 所有活动的用户都会收到足够的通知。
  • 在关闭开始前不久会显示一个大警告。
  • 很好地要求运行的应用程序退出。
  • 忽略好的请求的应用程序将更坚定地退出。
  • 在Mac最终关闭之前,请先完成注销。

流氓应用程序或流程很难阻止这些步骤。

为什么不 shutdown

使用shutdown将强制退出Mac上的所有进程,包括图形应用程序。对于许多应用程序,这是攻击性行为,不会为应用程序提供太多保存状态或数据的机会。

日程助理

Power Manager包含一个Schedule Assistant任务,用于关闭日程表

电源管理器-关闭日常任务

披露:我与制造Power Manager的公司合作。


0

我来看看苹果的这份技术说明


谢谢,我现在该怎么办?
哈里

您可以使用SendAppleEventToSystemProcess(kAEShutDown),然后可以使用命令killall -u username杀死所有应用程序(因为您不希望取消它),您可能还想查看计时器类:developer.apple.com/library/ mac /#documentation / Cocoa / Reference /…
Samantha Catania

1
很棒的文章,但是OP拒绝使用cron或launchd,我怀疑他是否打算编写自己的解决方案。
Macaco 2011年

1
虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
daviesgeek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.