cronとは
「あの機能を定期実行したい!」という時に使用するOS搭載のアプリケーションです。
1日に1回!や1時間ごとに1回!など任意の時間にプログラムを動かすことができるので非常に便利なcron様です。。。
cron.dを使う理由
Ubuntuにはcrontabとcron.dの2種類のcronが存在しているのですが、圧倒的にcron.dの方が管理しやすいです。
ディレクトリ構造が以下になっているのですが、cron.dはディレクトリ配下に機能ごとのファイルを設置できるのに対してcrontabは1ファイルの中に定期実行の記述を行います。
ファイル単位で実施したい定期実行を記述できるので、mysqlならmysqlのphpならphpのファイルを作成し、用途に合わせて作成管理ができちゃいます。
--cron.d
├──任意のファイルA
├──任意のファイルB
├──任意のファイルC
--crontab
※上記の「任意のファイル*」というファイル名には拡張子は含めないでください。
仕様上拡張子なしのファイル名で作成しなければいけません。
以下のような形でファイル作れます。
--cron.d
├──Cerbot
├──MySQL
├──PHP
定期実行の作成
cronの作成
今回はMySQLのバックアップを取りたいので、「/etc/cron.d/mysql」を作成する。
作成したファイル内に指定したファイルを実行させ、実行結果を指定のディレクトリに出力する。
##作成シェル
##分 時 日 月 年 所有者 実行ファイル 結果出力先
00 00 * * * root /var/mysql_backup/mysql-backup.sh > /var/mysql_backup/mysql-dump
シェルの作成
やりたいこととしてはmysql-dumpを使ってDBのバックアップを取得することになります。
まずはバックアップファイルを保管するディレクトリを作成します。
mkdir /var/mysql_backup
次にシェルを作成します。
touch /var/mysql_backup/mysql-backup.sh
nano /var/mysql_backup/mysql-backup.sh
次にバックアップの設定を行います。
#保管日 storagedate=14 #ディレクトリ指定 basedir='/var/mysql_backup/' #ファイル名定義 fileprefix="mysql-dump-" filedate=`date+%y%m$d` filename=$fileprefix$filedate #dumpコマンド mysqldump --single-transaction --skip-lock-tables --no-tablespaces --password='password' -u 'user' -B 'DB_name' > $basedir/$filename.sql #出力ファイル名のパーミッション(任意) chmod 775 $basedir/$filename.sql #削除対象日 deletedate=`date --date="$ days ago"+%y%m%d` #削除ファイル名の指定 deletefile=$basedir/$deletedate.sql #削除 rm -f $basedir/$deletefile
上記記述できたらcronを再実行して完了です。
うまく行かない場合はlogを確認して何が上手く行っていないのか確認してください。