Safariを定刻に自動操作するアプレットについて

MBA(Sierra)にて、AppleScriptで書いた、Safariを自動操作するアプレットを、Terminalからcrontabで定刻に実行しています。

ただし、自動実行において問題がありますので、解決方法を教えていただければと思います。


先ず、ログイン状態では、定刻にアプレットが、即ちSafariが自動操作されます。

一方、該アプレット内では、一連のSafari操作完了後に、次の定刻でも自動操作が行える様に、一定時間後にMBAが自動復旧する設定を行なった後に、スリープモードへ移行しています。

その後、スリープモードから定時にMBAは自動復旧するのですが、そのままのログアウト状態(つまりログイン画面のまま)では、crontabにより該アプレットが定刻に実行されたりされなかったりします。


しかし、実行されない原因の切り分けも出来ていません。

例えば、スリープモードから復旧した時点でネットワーク接続が確立されていないことがあるために、Safari実行、即ちアプレット完遂に失敗しているのかどうかさえ分かっていません。

どのようにして、原因の切り分けを行えば宜しいでしょうか

MacBook Air (13-inch Mid 2013), macOS Sierra (10.12.1), Safari 10.0.1

投稿日 2016/10/26 22:04

返信
返信: 24

2016/10/30 01:10 69_Plus への返信

69+ さんによる書き込み:


例えば、スリープモードから復旧した時点でネットワーク接続が確立されていないことがあるために、Safari実行、即ちアプレット完遂に失敗しているのかどうかさえ分かっていません。

Mac がスリープしたらLAN を止めてしまえば、それは調べられるのではないでしょうか。

2016/10/30 07:28 ni_ki への返信

ni_kiさま、ご返信、ありがとうございました。


やはりNW接続が確立していないことが分かったので、アプレットの冒頭に接続するまで待ち続けるループを入れてみました。

しかしNW接続が確立する前にスリープ復帰から30秒程度で(ログイン画面にて)再びスリープモードに移行してしまい、アプレットの本体が実行されず終いでした。

AppleScriptでスリープモードを解除するには、どうしたら良いか、ご存知でしたらご教授ねがいます。

ちなみに、次に示す2つの方法ではいずれもNGでした。

do shell script "/usr/bin/pmset -a sleep 0"

や、

do shell script "/usr/bin/pmset noidle &"

2016/11/01 01:50 69_Plus への返信

補足です。


その後、スリープモードから定時にMBAは自動復旧するのですが、

|そのままのログアウト状態(つまりログイン画面のまま)では、

|crontabにより該アプレットが定刻に実行されたりされなかったりします。


Sierraにアプデートした頃から、該アプレットがスリープからの復旧後に実行されなくなった気がします。

ここら辺りに解決の糸口はありませんでしょうか?

2016/11/01 02:46 69_Plus への返信

確かスリープの解除をスクリプトでやるのは、すごく大変だったのではなかったかと思います。「mac スリープ解除 スケジュール スクリプト」あたりでネットを検索すると情報があるようです。調べてみてはいかがでしょいか。Dark Wake 中では、スクリプトをまともに動かすのは厄介だと思いますので。

2016/11/03 22:11 ni_ki への返信

ni_kiさま、再度のご返信、ありがとうございました。


AppleScriptでスリープモード(への再移行)を解除すべく、教えて頂いたキーワード等で検索して、見つけた /usr/bin/caffeinateとか試してみたのですが、おっしゃる通りなかなか一筋縄では行きません。


その結果、どうもAppleScriptの問題というより、Sierra特有の問題の様な気がしています(ちなみに10.12.1ですがレインボーカーソルがぐるぐる回らずに固まる症状も頻繁にでます)。

先日、補足として書きましたが、Sierraにアップデートする前(El Capitanで)は、スリープからの復帰時に(ログイン画面の裏側で)アプレットが実行されていました。


しかし今は、復帰時のログイン画面にてWi-Fiアイコンが表示されない(本来扇マークが表示される箇所がぽっかり空欄になっている)状態が続きます。

そのまま放置していると復帰から30秒程度で再びスリープに入ってしまいます(アプレットも実行されません)。


次の更新(10.12.2)を待ってみようと思います。

2016/11/03 23:25 69_Plus への返信

過去にもスリープ解除の話は何回も出てきていると記憶しているのですが、かなり難しいようですね。スリープ解除時のWiFi の挙動もOS によってクルクル変わる気がします。冗談みたいな話ですが、プログラマブルなホビーロボットで定時で動く様なものは無いかとか考えてしまいます。そういうのがあればキーボードを押させられます。


ちなみにサーバを設置してそこからスリープ解除では意味がないのですよね。

2016/11/08 02:35 69_Plus への返信

スリープとスリープ解除を繰り返しながらネットワーク接続するようなAppleScriptを運用する場合には、有線LANでネットワーク接続するのがセオリーです。


それでもどうしても無線LAN接続で運用したい場合には、


ASOCで無線LANの各種情報を取得する v2

http://piyocast.com/as/archives/3599


無線LANネットワークを指定して接続する

http://piyocast.com/as/archives/2052


などの方法で「現在Macが無線LANに接続中なのか」「接続中でない場合に、接続可能な無線LANネットワークにどのようなものがあるのか」「接続すべき無線LANネットワークへの強制接続」を試みることになります。


さらに、無線LANに接続できた場合でも、きちんと外部のネットワークに接続できているかどうかの確認を行う必要があります。


ASOCでインターネット接続確認

http://piyocast.com/as/archives/3890


アプレット動作中のエラー情報などは、syslogにでも出力しておくとよいでしょう。


Syslogにメッセージを出力する

http://piyocast.com/as/archives/946

2016/11/11 11:35 Piyomaru への返信

Piyomaruさま、ご教授、ありがとうございました。


無線LANで接続できる様にはなったのですが、それでもやはり復帰から30秒程度で再びスリープに入ってしまいます。

アプレットの冒頭に次の様に書いて見たのですが効果はありませんでした。OSのバージョンに依存しない、方法はないのでしょうか。


do shell script "/usr/bin/caffeinate -u -t 180 &"

や、

do shell script "echo " & myPassword & "| sudo -S /usr/bin/pmset -a sleep 0 displaysleep 0"

など。

2016/11/15 08:15 69_Plus への返信

いきなりcron(lanchd?)からAppleScriptを起動して問題なく運用するというのは難易度が高いので、特定のユーザーアカウントでログインした状態で運用してはいかがでしょうか?


「OSバージョンに依存しない」というくだりの部分がどこにかかっているのかはよくわかりません。

2016/11/15 08:16 69_Plus への返信

間が空き申し訳ありません。サーバからどうやって起こすかで、30秒でスリープしなくなるのではないかと思っております。具体的なやり方を存じ上げないのですが、例えばシェルスクリプトを使ってサーバ側からssh でログインすれば30秒ではスリープできなくなると思います。もっともログインするなら、そのままサーバからスクリプトを実行でも良い気がししますが。

2016/11/16 02:55 69_Plus への返信

途中から失礼します。

基本的な部分になりますが、cronに指定したスクリプトが起動されているか確認されたのでしょうか。起動されていなければ、スクリプトをどのように変更しても意味がありません。


ちなみにAppleの開発者向け情報では、電源オフかスリープ中であった場合は次の指定時刻まで実行されない、と書かれています。その代替として推奨されているのがlaunchdです。cronを利用するよりハードルは高いですが、こちらはスリープ中に指定時刻になった場合はスリープが解除された際に実行されるので、参考にされてはいかがでしょうか。(下記のページにはサンプルコードも記載されています)

以下、Daemons and Services Programming Guide - Scheduling Timed Jobsより抜粋

Effects of Sleeping and Powering Off

If the system is turned off or asleep,

cron
jobs do not execute; they will not run until the next designated time occurs.

If you schedule a

launchd
job by setting the
StartCalendarInterval
key and the computer is asleep when the job should have run, your job will run when the computer wakes up. However, if the machine is off when the job should have run, the job does not execute until the next designated time occurs.

All other

launchd
jobs are skipped when the computer is turned off or asleep; they will not run until the next designated time occurs.

Consequently, if the computer is always off at the job’s scheduled time, both

cron
jobs and
launchd
jobs never run. For example, if you always turn your computer off at night, a job scheduled to run at 1 A.M. will never be run.

ちなみに、

> do shell script "echo " & myPassword & "| sudo -S /usr/bin/pmset -a sleep 0 displaysleep 0"

このスクリプトは意図通りに動作しません。

sudoコマンドはパスワードを使用中の入力デバイスから取得するのでパイプで標準入力から渡してもパスワードとして渡されません。(実行するコマンドへの入力として渡されます

> do shell script "/usr/bin/caffeinate -u -t 180 &"

また、caffeinate ですが、時間指定のかわりに実行するコマンドを引数として渡すことで、そのコマンドの実行中はスリープしないようにもできます。(詳しくは「man caffeinate」を参照ください)


以上、ご参考まで。

2016/11/16 05:19 ToMi への返信

do shell script "echo " & myPassword & "| sudo -S /usr/bin/pmset -a sleep 0 displaysleep 0"


このスクリプトは意図通りに動作しません。


あれ?動きませんか?当方 (OS X 10.6.8) では動きますよ。


man sudo より抜粋

The -S (stdin) option causes sudo to read the password from

the standard input instead of the terminal device.


ただし、TN2065 には下のような注意書きがあります。

Note: Using sudo(8) with with administrator privileges is generally unnecessary and creates security holes; simply remove the "sudo".


Technical Note TN2065 - do shell script in AppleScript

https://developer.apple.com/library/content/technotes/tn2065/_index.html


なので、本件の場合はこのように書くと良いかと。

set uname to "ユーザ名" set pword to "パスワード" do shell script "pmset -a sleep 0 displaysleep 0" user name uname password pword ¬ with administrator privileges


ただ、ログアウトさえしなければ、こんな面倒なことをしなくても良いと思います。というか、スリープしたのになぜログアウトするのかが分からないんですよね...。

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

Safariを定刻に自動操作するアプレットについて

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