cron
以下の3つの方法がある。
***
cd /etc/cron.d
拡張子がないファイルを直接保存する。
rootで644にする。
・記述方法
分 時 日 月 曜日 実行ユーザ 実行コマンド
となる。
(-)ハイフンでつなげて範囲を指定することもできるし、(,)カンマで区切って複数指定することもできる。(*)アスタリスクは全ての範囲という意味。
指定した数字は間隔ではなく、その数字と同じ値のときに実行されるという意味。間隔は(/)スラッシュで指定できる。
日と曜日については、2つとも(*)アスタリスクなら毎日。どちらか指定があればその指定した日となる。2つとも指定があればいずれかに当てはまる日となる。
指定がない場合の実行間隔は1分。例えば、 * */1 * * * とすると、(時=/1)は1時間ごとだが、(分=*)が1分ごと(*は全範囲)という意味なので、1分ごとになる。1時間ごとにしたい場合、0 * * * * のようにすればOK。ちなみに、(/)スラッシュを削除しただけの場合どうなるかというと、* 1 * * * となり、(時=1)なので、1時だけと思いがちだが、(分=*)が1分ごとなので、1:00から1:59まで1分ごとに実行されてしまう。
状態確認
sudo systemctl status cron
ログ確認
journalctl -e -u cron
uオプション:サービス指定
eオプション:最新のみ表示
***
/var/spool/cron/ユーザー名
ユーザー単位で管理される。
コマンドで管理する。
・基本コマンド
一覧
crontab -l
設定がなければ、crontab -e
で作成。
削除
crontab -r
編集
crontab -e
ユーザーの指定は不要。
***
/etc/crontab
root権限で管理される。
以下のファイルを変更すると反映される。
毎時実行
/etc/cron.hourly
毎日実行
/etc/cron.daily
毎週実行
/etc/cron.weekly
毎月
/etc/cron.monthly
***
・タイムゾーン設定
sudo timedatectl set-timezone Asia/Tokyo
確認の場合、
sudo timedatectl
変更したら、
sudo systemctl restart cron
rsync
rsync オプション コピー元 コピー先
コピー元の最後に/があるとフォルダの中身だけ、/がないとフォルダ自身も含めてとなる。同期先の/は関係ない。
共有にバックアップでフルアクセスにしたい場合、
rsync -p –chmod=a+rwx -r src dst
chmodとpが必要でハマった。
送信元に無いファイルを削除、特定のファイルを除外する場合、
–exclude=’xxx’ –delete
・rsync + ssh
転送先で鍵作成
sudo ssh-keygen -t rsa
ファイル名を聞かれるのでidとする。パスフレーズも聞かれるが指定しない。
秘密鍵:id、公開鍵:id.pubが生成される。
公開鍵の内容は転送先にある
.ssh/authorized_keys
に記載する必要があるので、
sudo cat id.pub >> .ssh/authorized_keys
もし、
.ssh配下にauthorized_keysがない場合は、
mv id.pub authorized_keys
などとしてもOK。作成した場合、パーミッション注意
chmod 600 authorized_keys
(すでに.ssh/authorized_keysがある場合、複数可なので追記する)
秘密鍵:idを転送元に持ってくる。ここではid.keyという名前にしておく。
必要な場合、
sudo chown root:root id.key
sudo chmod 400 id.key
転送元で以下のように実行すればOK。
sudo rsync -auz -e “ssh -i /home/ubuntu/id.key” /home/ubuntu/mysql/ ubuntu@転送先アドレス:/home/ubuntu/share
MySQLのバックアップ
・rsyncスクリプト
sudo vim /home/ubuntu/backup.sh
にファイルを作成する。
1 2 3 4 5 6 7 |
#!/bin/sh weekday=`date +%w` f=/home/ubuntu/mysql/project_management_${weekday}.sql mysqldump --single-transaction -u root project_management > $f rsync -auz -e "ssh -i /home/ubuntu/id.key" /home/ubuntu/mysql/ ubuntu@xxx.xxx.xxx.xxx:/home/ubuntu/share |
所有者rootでパーミッションは700
sudo chmod 700 /home/ubuntu/backup.sh
フォルダを作成する
mkdir /home/ubuntu/mysql
・cron設定
/etc/cron.d
の中に、
適当な名前でファイル作成、今回は
sudo vim /etc/cron.d/mysql_backup
とする。
所有者rootで、パーミッションは644(rw/r/r)
中には、
0 2 * * * root /home/ubuntu/backup.sh
と記入する。
起動しているかどうか
sudo systemctl status cron
手動バックアップの場合
mysqldump –single-transaction –skip-lock-tables -u ユーザー名 -pパスワード -h ホスト名 db名 > xxx_date +%Y%m%d
.sql