【AWS】Amazon Linux OS上で定期的に不要ファイルを削除する

今から、とあるサーバに対して不要ファイルの削除バッチを作成するので、メモがてら記事にしておく。

やりたいこと

  • 毎時に、特定のディレクトリにある1時間以前に作成されたzipファイルを削除する
  • 毎日定刻に、Apacheの一時データをクリアする

やったこと

rootユーザに切り替え

とりあえず最強の力を手に入れる。

# sudo su -

cron(定期実行)の作成

さて、いよいよ本題。

実は該当サーバにはLaravelでシステムが組まれていたので、Laravelで定期実行用の処理を作成して、定期実行の設定を行いたいと思う。

とりあえず、現行のLaravelバージョン確認を。

# php artisan --version
Laravel Framework 8.36.2

バージョンは8だったので、以下のリファレンスを参照。

Laravel 8.x タスクスケジュール
https://readouble.com/laravel/8.x/ja/scheduling.html

やりたいのは1時間以前のzipファイルを削除するだけなので、クロージャに処理を追加する。

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            $checkTime = strtotime('-1 hour');
            foreach (glob(public_path() . '/*.zip') as $file) {
                $mTime = filemtime($file);
                if ($mTime <= $checkTime) {
                    // 1時間以前のzipファイルを削除する
                    unlink($file);
                }
            }
        })->hourly();
    }

ローカルで動作確認するのに、良いやり方が特に思いつかなかったので、確認するときだけ、everyMinute()(毎分起動)にしてから、workコマンドで実行。

# php artisan schedule:work

動作確認できたら、本番サーバに設定する。

Laravel タスクスケジューラの設定

本番環境で、Laravelのタスクスケジューラを利用していない場合、cron設定を行う必要がある。

上記リファレンスにも書いてある通りにcron設定を行う。

# crontab -e

上記でcrontabを開いて、リファレンスページの内容をコピペする。

* * * * * cd [Laravelのルートディレクトリ] && php artisan schedule:run >> /dev/null 2>&1

括弧書きの部分には、環境に応じたディレクトリパスを記載する。

crontabでの変更後、特にデーモンプロセスの再起動は不要なので、設定した時間に動作するかどうかだけ確認する。

動作確認

動作確認用に、削除対象と削除対象外の適当なzipファイルを作成する。
その時に役立つコマンドをメモ。

# touch -t 202205041234.00 test.zip

touchコマンドは最終更新日を更新するコマンドだけど、-tオプション付けると指定日時で更新できる。

オプション付けなければ、現在時刻に更新されるので、touchコマンドを使って確認用のzipファイルを作成して、無事動作確認完了。

長くなってしまったので、もうひとつの毎日Apacheのtmpファイル削除は別口でまとめる。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のPG・SEを経て、独立。 現在はとある企業のCTOと、変な名前の会社の社長をしてる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください