回答:
launchd
これを使用して使用できます。次のxmlを新しいテキストファイルに配置~/Library/LaunchAgents/
し、接尾辞が.plist
。たとえば、私のものは~/Library/LaunchAgents/logoutAt1730.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>Logout At 5:30 PM</string>
<key>ProgramArguments</key>
<array>
<string>/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession</string>
<string>-suspend</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>17</integer>
<key>Minute</key>
<integer>30</integer>
</dict>
</dict>
</plist>
現在の電源サイクルで実行する場合(たとえば、これを有効にするために再起動する必要はありません)を使用launchctl load ~/Library/LaunchAgents/logoutAt1730.plist
してlaunchd
、新しいアイテムについて通知します。次にログインするときに自動的にロードされるはずです。
launchctl list
ラベル文字列(午後5時30分にログアウト)を使用して検索しlaunchd
、アイテムについて認識していることを検証します。
ワークステーションでこれが機能することを確認しました。なぜそうなのかわかりcron
ません。
編集:cron
この特定のユースケースで動作しない理由はわかりませんが、この答えはを使用した(現在より正確な)答えに取って代わりlaunchd
ます。
crontab -e
ターミナルアプリケーションで使用して、次のように適切なタイミングでCrontabに追加/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
します(午後5時30分):
30 17 * * * /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
似たようなものが欲しかったのですが、特定の時間に常にロックするのではなく、特定の条件でのみロックしたかったのです。これらの条件を確認するために使用したスクリプトはcronによってトリガーされたため、同じ問題が発生しました。
CGSession -suspend
cronjob を試してみて、トリガーされたときにConsole.appがエラーをログに記録し、rootと現在ログインしているユーザーのみがユーザーの簡易切り替えをトリガーできることを通知しました。だから私のソリューション:ルートとして実行します。
そのため、私のスクリプトでは、コンピューターをロックするために以下を使用しました。
sudo /usr/bin/osascript -e 'tell application "System Events" to do shell script "/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -suspend"'
複雑な?はい。ワーキング?ポジティブ!
sudo .../CGSession -suspend
(AppleScriptを使用せずに)直接使用しても機能しませんでしたか?