Mac にログインせずに自動シャットダウンするには

夜中にMacを自動起動し launchctl等でデーモンスクリプト実行後に自動シャットダウンしたいです。

スクリプト実行まではうまく行きましたがシャットダウンがされなくて困っています。

共有PCですのでログインしない状態で起動しています。

ログインしていないときはMacに自動シャットダウン設定をしても実行されないというのが仕様のようでマニュアルにそう書かれています。

launchctlデーモンから shutdown コマンドを実行する方法を試してみたのですが、これもうまくいかず。

ログイン状態ではきちんとシャットダウンしてくれるのですが、ログインしていない状態ではシャットダウンされませんでした。

方法があればご教授下さい。

iMac (21.5-inch Mid 2011), OS X El Capitan (10.11.5)

投稿日 2016/12/31 20:33

返信
返信: 13

2017/01/01 00:47 tsukui42 への返信

失礼します。

launchctlデーモンから shutdown コマンドを実行する方法を試してみたのですが、これもうまくいかず。

ログイン状態ではきちんとシャットダウンしてくれるのですが、ログインしていない状態ではシャットダウンされませんでした。

「launchctlデーモンから〜」というのは「launchctl」コマンドを使用し、スーパーユーザ(root)のデーモンとして登録したということでしょうか。単に、launchctlを使っただけではユーザ権限のエージェントになってしまっている可能性もありそうです。(行った作業の詳細が不明なので断言できませんが)


私なら、以下のようなplistファイル( owner:root、mode:644 )を/Library/LaunchDaemons/内に作成して再起動、でしょうか。(未検証)

<?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>local.my.shutdown-midnight</string>


<key>ProgramArguments</key>

<array>

<string>/sbin/shutdown</string>

<string>-h</string>

<string>now</string>

</array>


<key>StartCalendarInterval</key>

<dict>

<key>Minute</key>

<integer>0</integer>

<key>Hour</key>

<integer>0</integer>

</dict>

</dict>

</plist>


ただ、このままだと0:00にスリープ状態だった場合、翌朝スリープから解除された途端にシャットダウンする事に成りかねないので、shutdownの直接起動ではなく、スクリプト内から条件をチェックした上で実行するようにした方がよいかもしれませんね。


追記:

はに による書き込み:


あるいは、システム環境設定>省エネルギーのスケジュールで決まった時間に自動シャットダウンにしておくとか。

このスケジュール機能には制限があり、ヘルプでは以下のようになっています。

「お使いの Mac が指定した時刻にシステム終了するためには、コンピュータがスリープ状態ではなく、ユーザがログインしている必要があります。ユーザが Mac にログインしていないか、または Mac がスリープ状態の場合、お使いのコンピュータはシステム終了しません。」

質問者の方も書かれてますが、今回の問題(自動・ログインユーザ無)では使えないようです。

2017/01/01 07:22 tsukui42 への返信

「同等の方法」というのが気になりますが、OS Xの仕様ということはない(はず)です。

一応 Sierra で shutdownがログインユーザ無しでもできるということは確認してます。

(都合によりlaunchdでは未検証。El Capitanでも多分同じ動作)

テスト環境:

MacBook Pro / OS X Sierra 10.12.2

テスト方法:

1. Terminal から「sudo crontab -u root -e」コマンドを使用し root (スーパーユーザ)アカウントのcrontab に以下の行を追加。(mm、hhはそれぞれ指定時刻の分、時)

mm hh * * * /sbin/shutdown -h now

2. ログアウトし、指定時刻まで待機。


注:

  1. Appleはlaunchdでcrontabの機能をおきかえる方針のようで、crontabの利用はApple非推奨になります。
  2. crontabの場合、指定時刻にシステムがスリープ状態もしくは電源オフだと、そのエントリは実行されません。

2017/01/01 05:21 ToMi への返信

まず、システム環境設定>省エネルギーのスケジュールで決まった時間に自動シャットダウンにしておくという方法ではシャットダウンはできないのは仕様です。ログインしないとシャットダウンしないとマニュアルに書かれています。そこでご提案のplistと同等の方法を試してみましたがダメでした。ログインしているときはシャットダウンしてくれるのですが、ログインしていないとシャットダウンしてくれませんでした。Mac OSの仕様と思って半分あきらめかけています。

2017/01/01 05:28 はに への返信

リモートログインしてシャットダウンする以外に手はないのかなーと思っています。が、pcは1台しかないのでその選択肢はとれません。アンドロイド端末からシャットダウンできればなあと考えてみたりしてますがノーアイデアです。


システム環境設定>省エネルギーのスケジュールで決まった時間に自動シャットダウンにしておくという方法ではシャットダウンはできないのは仕様です。ログインしないとシャットダウンしないとマニュアルに書かれています。実際にできないことは確認済みです。

2017/01/01 07:22 ToMi への返信

大変失礼しました。再度ためしたところlaunchctlで無事にうまくいきました。試しにと思いRunAtLoadをtrueにしてみたところMac起動直後にシャットダウンし、無事に(?)起動してシャットダウンを永遠に繰り返してくれる状態になりました。デーモンでシャットダウンできるのは間違いないことを確認できたところで何を勘違いしているのか考えてみたところ自分のポカでした。


どうもテストを繰り返しているうちにminuteとhourを逆に思ってしまったようです。最初のテスト(ログイン時)ではきちんとしていたのですが、最後の段階でminuteとhourを逆に思ってしまい、デーモンでは起動しないと思い込んだというオチだと思います。

バカバカしいケアレスミスで大変申し訳ありませんでした。ToMiさんがスクリプトまで書いてくれたのでもう一度見直そうと思い、気がつくことができました。ありがとうございました。

2017/01/01 17:33 ToMi への返信

本日、launchctlで無事に動作を確認できました。

昨夜は少し慌てていたのか疲れていたのか失敗の理由は不明です。


結論としては

/Library/LaunchDaemons/内のスクリプトでログインせずともシャットダウンできる。

・投稿時に質問した時はHourとMinuteを取り違えていたせいで上手くいっていないと勘違いしていた。

 (サンプルスクリプトはMinute→Hourの順なのでいつ間にか取り違えてしまった)

ということです。


ToMiさんにご教授いただいた内容で間違いありませんでした。

スクリプトを整えて、無事にやりたいことができるようになりましたので終了とさせていただきます。

2016/12/31 23:22 tsukui42 への返信

他のPCからリモートログインしてshutdownするとか(同じ部屋の別のPCでリモートログイン、シャットダウンのスクリプトを動かす)。

あるいは、システム環境設定>省エネルギーのスケジュールで決まった時間に自動シャットダウンにしておくとか。

2017/01/01 05:36 ToMi への返信

システム環境設定>省エネルギー

ではNGという説明きちんと書いてくれてましたね。きちんと最後まで読まずに返信してしまいすみませんでした。plist でシャットダウンする方法はうまくいったとしても気を付けないとToMiさんご指摘のようにログインと同時にシャットダウンしてしまうことになりかねないので気持ち悪いですよね。

今のところうまくいかないようなのでスクリプトは無効にしてあるので大丈夫です。

2017/01/01 07:30 ToMi への返信

と思いきややっぱりシャットダウン確認ミスでした。

とっちらかってすみません。デーモンでシャットダウンできるというところまでは間違いないですのでたぶん何かこちらのケアレスミスだと思います。

明日落ち着いて確認してみます。

Cronの方も試してみます。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

Mac にログインせずに自動シャットダウンするには

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。