特定の時間にアプリケーションを終了してコンピュータをスリープ状態にするAppleScriptを作成するにはどうすればよいですか?


8

私はこれを機能させるためにAppleScriptとAutomatorをいじくり回してきましたが、ただ頭を抱えているようには見えません。誰かが私に例を示すか、特定の時間にアプリケーションを閉じてコンピューターをスリープまたはシャットダウンする方法についていくつかのヒントを教えていただければ、大歓迎です。


これを定期的に実行しますか、それとも手動で開始しますか?
エフスミス2012

AppleScriptはすでに書かれていますか?
エフスミス2012

それは私が定期的に行いたいことであり、開始を心配する必要はありません。私はスクリプトを書きましたが、それは非常に面倒だったので、それをゴミ箱に捨てて、ここで終わりました。ご回答有難うございます。私はこれをやってみます。うまくいけば、私が抱えていた問題が解決するでしょう。
トマス・リチャードソン

これを定期的にat実行する場合は、ジョブのスケジュールを設定するのは適切ではありません。cronまたはlaunchd。それを設定するためのより簡単なインターフェースが必要な場合は、おそらくリンゴン3が役立つでしょう。
ephsmith

回答:


14

この手順を定期的に実行するのではなく、開始することを想定しています。

私のアプローチはこれをコマンドラインから開始することですが、コマンドはAutomatorスクリプトのシェルスクリプトコンポーネントで変更を加えて実行できます。次のアプローチは、いくつかのコンポーネントを組み合わせて仕事を完了します。

  1. tellアプリケーションを終了するコマンド
  2. コンピューターをスリープ状態にするコマンドライン呼び出し
  3. 特定の時間に1と2をスケジュールするためのコマンドライン呼び出し。

1.アプリケーションに終了するように伝える

これは次のように簡単です。

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

2.コンピュータをスリープ状態にする

見てpmsetの詳細についてはなく、次のコマンドを発行すると、スリープ状態にコンピュータを配置します。

pmset sleepnow

3.特定の時間に実行される操作のスケジュール

atコマンドを見てください。このコマンドを使用すると、コマンドを実行する時間を指定できます。この機能はデフォルトでは有効になっていないため、有効にする必要があります。atrunデーモンを有効にするには、次のコマンドを実行します[SUのリファレンス]

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

を有効にするatrunと、次のコマンドを発行して、特定の時間にコマンドをスケジュールできます

echo "<command>" | at HH:MM

これatstdin、デフォルトで入力を取得するため機能します。より簡単な方法は、ファイルにリストされたコマンドを実行することです。-fフラグを使用してファイルを実行し、次のように実行するスクリプトの名前を続けます。

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

すべてを一緒に入れて

以下では、それatrunが有効になっていると想定しています。おもちゃの例として、Mailを終了してコンピュータを午後11時にスリープ状態にしたいとします。次のように、実行するコマンドを含むファイルを作成します。

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

そのファイルを保存しquit-and-sleepて、コマンドラインで実行します

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

注意事項

Mailが実際に閉じていることを確認するためのチェックは行いませんでした。また、スクリプトは、コンピューターをスリープ状態にする方法が他にないことを前提としています。ここでは、必要なものの開始点として、それを単純なままにしています。


1

これは、ハードコードされた時間値を指定してこれを実現する厳密にAppleScriptバージョンです。もちろん、必要に応じてこの部分をインタラクティブにすることもできます。また、このバージョンは、時間列が今日に関連していることを前提としています。

--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

1

イベントは次の場所で1度だけスケジュールできます。

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

または、毎日繰り返すようにスケジュールするには、crontabを編集して、次のEDITOR=nano crontab -eようなエントリを追加します。

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow

23:59に<<< 'osascript -e "quit app \" Mail \ ""; pmset sleepnow 'が機能しません。「2016年4月30日土曜日12:47:00にジョブ1」と表示されますが、時間が来てもコマンドは実行されません
ラッキーマン

0

次のコードは、現在のアプリケーションを終了してスリープ状態になる前に、数秒待機します。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.