これ便利だ
https://github.com/youpy/ruby-launch-agent
https://rubygems.org/gems/launch-agent

Macで常時起動、あるいは定期的に実行させたいスクリプトを配布するのによい。


youpyさんが作ったlaunch-agentというgemを使うと、LaunchAgentsに起動設定を登録できる。
LaunchAgentはMacを起動した時にアプリを自動起動してくれる人で、$HOME/Library/LaunchAgentsや/Library/LaunchAgentsに起動設定ファイルがある。


githubのREADMEにはLaunchAgent::Daemonを使って常時起動させるアプリを登録する方法が書いてある。
今回は定期的に起動したかったので、ソース読んでみたらLaunchAgent::Periodicというのがあった。

使い方

require 'rubygems'
require 'launch_agent'

agent = LaunchAgent::Periodic.new(60, 'ruby', '/Users/sho/test.rb', '引数1', '引数2')
agent.load
agent.unload
60秒ごとに指定したスクリプトが起動する。


こういう設定ファイルが $HOME/Library/LaunchAgents に生成されていた。
(これは今作ってる別のアプリの設定ファイル、300秒ごとに実行される)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.shokai.ruby___usr_bin_wifi_location_logger___write_log___logpath__var_log_wifi_location</string>
<key>ProgramArguments</key>
<array>
<string>ruby</string>
<string>/usr/bin/wifi_location_logger</string>
<string>-write_log</string>
<string>-logpath=/var/log/wifi_location</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
</dict>
</plist>



何も指定しないとcom.buycheapviagraonlinenowって名前でサービスが登録されるので、
$VERBOSE=nil
module LaunchAgent
class Base
DOMAIN = 'org.shokai'
end
end
$VERBOSE=true
warningを一時的に止めつつLaunchAgent::Base.DOMAINを上書きしたらよい感じになった。