Worse is better.😀

mac book + crontabでプログラムを定期実行する方法【超簡単】

時計 未分類

macOS + crontabで面倒な処理を自動化しよう!

「毎日正午に特定のアドレスに向けてメールを飛ばしたい」
「1時間ごとにフォルダの中身をチェックしてリスト化したい」
こんな定期処理にまつわる要望を叶えてくれるのが「crontab」というコマンドです。

「crontab」とは、決められた日時・時刻に任意のプログラムを実行するデーモンである
「cron(クーロン)」の振る舞いを指定するためのUNIX/Linuxのコマンドであり、
UNIX系OSであるmacOSでもこのcrontabコマンドを利用することができます。

当記事ではそのcrontabを、mac book上で動かし、
簡単なプログラムを決められた時刻に定期実行する方法を
ステップバイステップでご紹介します。

ご参考までに、今回使用するPCのスペックはこんな感じ。

先に述べたようにcronおよびcrontabはUNIX/LINUX共通の機能なので
macOS搭載PCであれば、air以外の mac bookやmac proなどでも同じ手順で設定が可能です。

それではいってみましょう。

step1. 定期実行させたいプログラムファイルを用意する

cronの設定をする前に、まずは肝心の定期実行させるプログラムの方を用意しましょう。

プログラム言語はスクリプト言語であればPHPでもrubyでもシェルスクリプトでも何でも良いのですが、今回は知名度が高く、かつmacにデフォルトでインストールされているpython(.py)を使用します。

今回のメインはcrontabの方なのでプログラムは動作確認に最低限必要な内容です。

f = open("demofile2.txt", "a")
f.write("Now the file has more content!")
f.close()

このプログラムを実行すると同じ階層のディレクトリにdemofile2.txtというテキストファイルが生成されます。

デスクトップ上に「scripts」というフォルダを作成し、続いてテキストエディタを開いて上記のコードをペーストしたらscriptsフォルダ内に「test.py」という名前で保存してください。

step2. cronが正しく動作するようにmacの設定を変更する。

macではセキュリティの関係から、アプリケーションがアクセスできる権限が限定されています。

そのままではcronがファイルを生成したりできないので、先にここの設定を変えておきましょう。

「システム環境設定」 > 「セキュリティとプライバシー」 > 「フルディスクアクセス」と進んで、左下の鍵アイコンをクリックして設定の変更が可能な状態にしてください。

続いて右側の+ボタンをクリックしてファイル一覧のウィンドウを開いたら
「command + shift + G」を同時に押します。

すると、次のような入力画面が表示されるので「/user/sbin/cron」と入力して、表示された移動先をクリックしてください。

あとはcronが選択された状態で「開く」をクリックすれば一覧にcronが追加されているはずです。

step3. crontabの設定を行う

ここからはいよいよcrontabを触っていきます。
macの「ターミナル」を起動してください。

もしdoc上にターミナルが表示されていない場合は、
「Command + Space」を押してから「ter」と入力してください。

すると一覧にターミナルのアイコンが表示されると思うので
そちらをクリックしてターミナルを起動しておきます。

ターミナルが立ち上がったら、
ターミナル上で「crontab -e」と打ち込み、Enterを押してください。

するとvimエディタが起動して現在のcrontabの内容が表示されます。

ここに「いつ」「どのプログラムを実行するか」といった情報を書き込むことでcronが動作するという流れになります。

キーボードの「i」をクリックしてvimの編集モードに移行し、
一番上の行に「*/2 * * * * cd ~/desktop/scripts && python test.py」という記述を追加してください。

crontabの書き方

記述内容の意味ですが、まず「*/2 * * * *」という部分がそれぞれ「分 時間 日付 月 曜日」という対応で「定期処理の間隔」の指定になります。

上記だと、まず分が「*/2」となっていますが、これは「2の倍数の分ごとに実行」の意味になります。
「*/3」なら3の倍数の分ごと、「*/4」なら4の倍数の分ごとですね。

そして分以外の全ての設定は「*(アスタリスク)」で、これは指定なしという意味になります。

crontabの時間指定に関しては英語のサイトになりますが、以下のサイトでシミュレーションができるので書き方に迷ったら利用してみるのも良いですね。

Crontab.guru - The cron schedule expression generator
An easy to use editor for crontab schedules.

次に、残りの「cd ~/desktop/scripts && python test.py」の部分ですが、
これは訳すと「~/desktop/scriptsに移動して、python test.pyを実行してね」という意味になります。

crontabの変更を保存する

crontabの入力が済んだらescキーを押してINSERTモードを終了します。

その後、:wqと打ち込んでからEnterを押すことで
編集内容を保存しつつvimを終了することができます。(保存せず終了する場合は :q!)

この直後に「”ターミナル”がコンピューターを管理することを要求しています。管理にはパスワード、ネットワーク、およびシステム設定の変更が含まれます。」というアラートが出るかと思いますが、こちらは「OK」で問題ありません。

その後、問題なければターミナル上に「crontab: installing new crontab」と表示されるはずです。

step4. crontabの動作確認をする。

以上でcronを動かす準備が完了しました。
最後に動作チェックをしましょう。

もしここまでの手順を正しく完了していれば、
「◯時0分、◯時2分、◯時4分…」といった具合に
2の倍数の分の時にtest.pyファイルが実行され、
その度にscriptsフォルダ内に「demofile2.txt」という
テキストファイルが自動生成されるようになっているはずです。

まずscriptsフォルダを開いてtest.pyのみが存在していることを確認し、
あとはそのまま2分ほど待ってみましょう。

自動でファイルが追加されました!

「最初にフォルダを開いた時点でもうdemofileが作られていたんだけど…」
という方は一旦demofile2.txtを削除するか、
ファイルの更新時間をチェックして
2分ごとに正しく再生成されているか確認してみると良いでしょう。

もし一向に生成されないようであれば、
・crontabファイル
・test.py
・フルディスクアクセス
のいずれかの設定が間違っている可能性があるので
お手数ですがこれらの設定が正しく行われているかもう一度確認してみてください。

終わりに

crontabの良いところは、pythonやPHPなどのプログラミング言語と組み合わせることでありとあらゆるタスクを自動化できることです。

複雑な処理をさせようと思うとプログラミングへの習熟が必要となりますが、覚えておけば何かと役立つ機会の多い技術ですので、ぜひこの機会にあなただけのオリジナル自動処理制作にトライしてみてください。

それでは。

コメント

タイトルとURLをコピーしました