【linux】cronの設定

まず、cron が使える状態であることを確認

centOS6の場合

# /etc/rc.d/init.d/crond status
crond (pid xxxx) を実行中... // 動いている!

almalinux9の場合

sudo systemctl status crond

現在設定されているcronの確認

# ログインしているユーザーのcron情報が確認できる
crontab -l
# システムレベルの操作はrootユーザーなのでsudoが必要
sudo crontab -l

※ cronでファイルを実行する場合、そのユーザーが実行できる権限を持っている必要がある

※ crontab -r は全消去なので注意

crontabの編集

sudo crontab -e

cronの書き方

cron ジョブの出力先を指定

MAILTO=xxxxx@yahoo.co.jp

出力やエラーが発生しない場合(例えば出力が全て /dev/null にリダイレクトされている場合)は、メールは送られない

メール送信テスト用の記述

MAILTO=xxxxx@yahoo.co.jp*/5 * * * * echo "testmail" #五分おきにtestmailと送信

以下の書き方ではyahooメールあてに送れなかった

MAILTO=xxxxx@yahoo.co.jp*/5 * * * * echo "メール送信テスト"

日本語を含むと、SMTPUTF8 is required, but was not offered by host
mx3.mail.yahoo.co.jp みたいなエラーが出て送れない

対処法

/etc/postfix/main.cf に smtputf8_enable = no(もしくはyes)と記述してもダメだった

//編集内容。一分おきに「テスト出力」を追記
————————————————-
*/1 * * * * echo “テスト出力” >> /var/backup_sql/test.txt
————————————————-

日付入りファイルの場合
————————————————–
*/1 * * * * echo “テスト出力” >> /var/backup_sql/backup_`date +\%Y\%m\%d`.txt
————————————————–
日付は本来 date +%Y%m%d でいけるが、cron の場合 \ のエスケープが必要

一分過ぎたらファイルが出力されているか確認する
————————————————-
cat /var/backup_sql/test.txt
————————————————-

cron のログ確認ならこっち
————————————————-
tail -f /var/log/cron
————————————————-
※tail は最後の10行のみ表示

毎晩三時二分にシェルスクリプトを実行
————————————————-
#am03:02 execution
2 3 * * * /var/myshellscript/backupmysql.sh
————————————————-

backupmysql.sh の内容

#!/bin/sh

# バックアップの保存期間(days)
period=30

# バックアップ保存用ディレクトリの指定
dirpath='/var/backup_sql'

# MySQLrootパスワード
ROOTPASS=xxxxxxxx

# ファイル名を指定する(※ファイル名で日付がわかるようにしておきます)
filename=`date +%y%m%d`

# 指定したDBのスキーマおよびデータをすべて吐き出す ファイル名接頭辞はあれば
mysqldump -u root --password=パスワード データベース名 テーブル名 > $dirpath/ファイル名接頭辞_$filename.sql

# パーミッション変更
chmod 700 $dirpath/ファイル名接頭辞_$filename.sql

# 保存期間を過ぎたバックアップを削除
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/ファイル名接頭辞_$oldfile.sql

# メール送信
echo "cronがシェルスクリプトを実施。hyogenデータベースのバンプが完了。" | s-nail -s "db保存通知" -r "cron@hyogen.info" 送信メールアドレス@yahoo.co.jp
#サーバーが再起動したときにメールを送る
@reboot (dmesg ; tail -100 /var/log/messages)| s-nail -s "`hostname` rebooted(サーバー再起動)" -r "from_cron" 送信メールアドレス@yahoo.co.jp

古いやつなら

#サーバーが再起動したときにメールを送る
@reboot (dmesg ; tail -100 /var/log/messages)| Mail -s "`hostname` rebooted(サーバー再起動)" -r "from_cron" 送信メールアドレス@yahoo.co.jp

↑正確には crond が再起動したとき。送信メールサービスの再起動が完了していないと送信されないと思う
-sオプション:タイトル指定
-rオプション:送り主メールアドレス指定。ここにtest@example.comのように実際には存在しないメールアドレスを書くとメールサーバーによって受け取り拒否になる場合があるので注意

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