![見出し画像](https://assets.st-note.com/production/uploads/images/73749099/rectangle_large_type_2_1ef7d89abee82d8ba086730d7ddfde29.jpeg?width=1200)
【CLI ライフハック】 crontab で早寝早起き
概要
この記事ではこの前の動物の鳴き声のアラーム作成の
記事で作成したアラームを crontab で定期実行する
スクリプトをコードします
動物の鳴き声のアラームは朝の目覚めにはいいですが
就寝前のアラームとしてはうるさいので、就寝アラーム
用に新しくコードを考えます
読み飛ばす
今回のスクリプトは Github の方に上げてあります
とりあえず使いたい方は以下のコマンドを実行後、
crontab に登録 に飛んで下さい:
cd ~
git clone https://github.com/alpineyahoo/.cron.git
環境設定
$ sw_vers
ProductName: macOS
ProductVersion: 12.3
BuildVersion: 21E230
$ brew install zsh mplayer (tree)
コマンド構成
仕様
07:00 牧場風に起こされる
23:00 子守唄のオルゴールとあくびといびきで就寝
時間を知る通知ダイアログが表示される
ダイアログを完了すると音声も止まる
ダイアログを完了しなくても所定時間が経過すれば
自動で音声が止まる
こんな感じの仕様にしたいですね…
今回使用するシェルとコマンド
zsh, afplayer, mplayer, osascript,
pkill, crontab, (tree)
osascript: Applescript を実行するコマンドです
pkill: プロセスをプロセス名指定で停止できます
並列実行
ダイアログを表示するコマンドと音声再生のコマンドを
並列実行させ、また音声ファイルを利用することから、
今回はバンドル作成、つまり新しくディレクトリを作成
してその中に複数のコマンドと音声ファイルフォルダを
作るというやり方で進めていきます
シェル藝の時間
始めに
コマンドをホームディレクトリ配下に作成したいと
思います:
mkdir ~/.cron
cd ~/.cron
mkdir sleep wakeup
# wakeup: 起床用, sleep: 就寝用
cd sleep # sleep ディレクトリ配下を編集
touch cronzzz dialog main
chmod +x ./*
mkdir sounds # 音声ファイルを配置するディレクトリ作成
cd ../wakeup # wakeup ディレクトリ配下を編集
touch cronranch dialog main
chmod +x ./*
# cronzzz, cronranch: 音声ファイル再生コマンド
# dialog: ダイアログ表示コマンド
# main: 並列実行コマンド
cd .. # ~/.cron ディレクトリに移動
pwd # 一応現在のディレクトリ (~/.cron) 確認
tree # ディレクトリ階層を表示
open . # Finder で確認したければ
目覚まし
下記実行で編集開始:
cd ~/.cron/wakeup
nano cronranch
名前が cronranch の実行ファイルには前回の記事で
作成したコマンドから ttimer を除いて繰り返し回数を
変更した以下の内容をコピペ:
#!/usr/bin/env zsh
summon () {
/usr/local/bin/mplayer -really-quiet http://www.google.com/logos/fnbx/animal_sounds/${1}.mp3
}
repeat 5 {
summon rooster &
summon horse &
summon cow
}
# mplayer は絶対パスである必要があるみたいです
次は名前が dialog の実行ファイルを編集:
nano dialog
ユーザーがダイアログ表示を完了させた後、並行実行している cronranch を停止させる pkill コマンドを記述しますが、シバングを osascript にする関係で osascript からシェルスクリプトを実行するメソッド:
do shell script "foobar"
を使用します
以下を記述:
#!/usr/bin/osascript
display dialog "Good morning" buttons {"OK"} default button "OK" giving up after 14
# メッセージ: "Good morning"
# OK ボタンで完了
# 音声再生が終了する14秒後にはボタンプッシュがなくても自動的に完了
do shell script "pkill -f cronranch mplayer"
# cronranch と mplayer を停止
名前が main の実行ファイルを編集:
nano main
ファイル内容は以下:
#!/usr/bin/env zsh
cd ~/.cron/wakeup/ # この記述必要です
./cronranch & ./dialog
これで目覚ましの方は完成 :)
試しに以下を実行して動作を確認してみましょう:
~/.cron/wakeup/main
就寝時間通知アラーム
落ち着いた感じの音声ファイルを用意しましょう
上記の音声ファイルをダウンロード・展開し、音声
ファイルを下記のディレクトリ内に配置:
~/.cron/sleep/sounds/
下記実行で編集開始:
cd ~/.cron/sleep
nano cronzzz
ファイル内容は以下:
#!/usr/bin/env zsh
afplay -t 17 ./sounds/lullaby.mp3 &
afplay -t 17 ./sounds/yawning.mp3 &
afplay -t 17 ./sounds/snoring.mp3
# 三種類のファイルを並行再生
dialog を編集
内容は以下:
#!/usr/bin/osascript
display dialog "Have a good night's sleep" buttons {"OK"} default button "OK" giving up after 17
do shell script "pkill -f cronzzz afplay"
main を編集
内容は以下:
#!/usr/bin/env zsh
cd ~/.cron/sleep/
./cronzzz & ./dialog
これで就寝時間通知アラームの方も完成 :)
試しに以下を実行して動作を確認してみましょう:
~/.cron/sleep/main
crontab に登録
以下のコマンドで現在の crontab 設定が確認できます:
crontab -l
crontab のタスク内容を編集していきますが、デフォルトのエディタは vim のようなので、nano を使いたい方はまず以下のコマンドを実行:
echo "export EDITOR=nano" >> ~/.zshrc
source ~/.zshrc
# bash の場合は ~/.zshrc のところは ~/.bashrc
# 注意: ">>" は絶対に ">" と書かない(上書き保存されてしまいます)
crontab のタスク内容を編集:
crontab -e
以下を追記:
00 7 * * * ~/.cron/wakeup/main
00 23 * * * ~/.cron/sleep/main
# 一例です
完了です :)
これで健康な生活をゲットできる…!?
まとめ
今後は GitHub での公開がメインになるかも…
しかし一般的には note.com の方がソーシャル性のある
プラットフォームであると思われるので、こちらでも
時々投稿しようかなと思っています :)
追記('22 03/15)
Mac では crontab よりも launchd の方が推奨
なんですね、知りませんでした…
今度は launchd の方でトライしてみようっと :)
いいなと思ったら応援しよう!
![alpineyahoo](https://assets.st-note.com/production/uploads/images/73697695/profile_0feab4f2e31831c7e5ba4bc2c90bc966.jpeg?width=600&crop=1:1,smart)