LoginSignup
7

More than 1 year has passed since last update.

posted at

updated at

【cron】Macでcronを設定してみた

はじめに

cron を触る機会があったので流れを理解するために、簡単なサンプルコードを作成して cron の設定をしてみました。

目次

実装フロー

  • 定期的に動作させたいファイルを作成( やりたいことはなにか )
  • cronを登録( どのくらいの頻度で動かしたいか )

具体的に言うと下記のようなプログラムを想定しています。

  • cron からphpコマンドを叩く(引数を渡してあげる)
  • phpでは引数を受け取ってそれを毎分logファイルに書き込む

今回はあくまで練習なので簡単なコードを作成して動かしてみました。
現在時刻を引数として受け取っていればその 時間を整形し出力 する、なければ 「今何時?」 と出力する。

今回、定期的に動作させたいファイルはPHPで作成しました。

サンプルコード

sample.php

sample.php
<?php

// 引数を受け取っていれば
if (isset($argv[1])) {
    // 現在時刻を整形する
    $current_time = (new \DateTime($argv[1]))->format('Y-m-d H:i:s');
}

// 引数があるときとないとき出力先を決める
$output_file_path = '/var/log/cron.log';
$error_file_path = '/var/log/error.log';

// ログ出力をする
if ($current_time) {
    error_log($current_time . PHP_EOL, 3, $output_file_path);
} else {
    error_log('今何時??' . PHP_EOL, 3, $error_file_path);
}

cronの設定

cronの登録

ターミナル
crontab -e

cronの内容


# /usr/bin/php はphpコマンド
# シェルスクリプトであれば sh になります。
# ***のところで毎分実行の設定をしている

* * * * * /usr/bin/php [上で作成したファイルのパス]/sample.php
* * * * * /usr/bin/php [上で作成したファイルのパス]/sample.php `date '+\%Y\%m\%d\%H\%M\%S'`

登録しているcronの確認

ターミナル
crontab -l

logファイルを確認

想定通りの挙動を確認できました。

/var/log/cron.log
2021-05-22 14:25:00
2021-05-22 14:26:00
2021-05-22 14:27:00
/var/log/error.log
今何時??
今何時??
今何時??

cronの削除

今回は練習のための設定なので最後に cron を削除していきます。

ターミナル
crontab -r

削除できたか

ターミナル
crontab -l

で一応確認。

おまけ

cronの * の意味

1 2 3 4 5 6
曜日 コマンド
* * * * *

logファイル出力ができず permission denied

実行権限、書き込み権限などがないかもしれません。
対象となるファイルの権限を変更してみたら解消されるかもしれません。

ターミナル
sudo chmod 777 [ファイル名]

Datetimeでエラーが起きる?

cron でdateコマンドでフォーマットを使用するときは % の前に \ をつけてエスケープしてあげることで正しい挙動になるかと思います。(参考文献)

  • 通常のLinuxコマンド
ターミナル
`date '+%Y%m%d%H%M%S'`
  • cron の場合
ターミナル
`date '+\%Y\%m\%d\%H\%M\%S'`

おわりに

簡易的に cron を設定してみました。
自分の環境に落とし込むと理解が捗りますね。

参考文献

cron

シェルスクリプト

PHP

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7