cronで土日判定を仕込んだAutoMysqlBackup.shがWindows改行コードでエラーになったのでLinux向けに変換
ちなみに、自分は依頼されたスクリプトをCentOS7の環境で
修正したものをcronで時間指定をして実施した。
成功したらメールが飛んでくるはずだけど、メールが飛んで
来なくて、ログファイル(/var/log/maillog)を確認するとエラー
でコケてた。
で、/var/spool/mail/root に新しいメールが来てるって通知を
見たら、以下のエラーが(ΦωΦ)
/root/automysqlbackup.sh: 行 97: $'\r': コマンドが見つかりません
/root/automysqlbackup.sh: 行 100: $'\r': コマンドが見つかりません
/root/automysqlbackup.sh: 行 103: $'\r': コマンドが見つかりません
/root/automysqlbackup.sh: 行 106: $'\r': コマンドが見つかりません
/root/automysqlbackup.sh: 行 109: $'\r': コマンドが見つかりません
/root/automysqlbackup.sh: 行 351: $'\r': コマンドが見つかりません
/root/automysqlbackup.sh: 行 366: $'\r': コマンドが見つかりません
/root/automysqlbackup.sh: 行 423: 予期しないトークン `$'{\r'' 周辺に構文エラーがあります
'root/automysqlbackup.sh: 行 423: `dbdump () {
Linuxの改行コードは'\n'だから、Windowsの改行コードの'\r\n'の'\r'を
コマンドと認識してしまったらしいね。
そこで、Windowsの改行コードをLinux向けに変換する必要がある。
「Windows改行コードをUNIX改行コード変換」でググると、だいたい
trコマンドかnkfコマンドで変換する方法が上の方に上がってくる
けど、なかなかうまくいかないし、実行環境にnkfコマンドが
インストールされていなかったので、dos2unix をインストール
して使ってみる。
[手順]
1. dos2unixをCentOS7環境にyumでインストール。
# yum install -y dos2unix
2. fileコマンドで変換前のファイルの改行コードを確認。
# file automysqlbackup.sh.org
automysqlbackup.sh.org: Bourne-Again shell script, Non-ISO extended-ASCII text executable, with CRLF line terminators
3. dos2unixコマンドを使い、Windows用の改行コードを
UNIX用に変換。
# dos2unix automysqlbackup.sh.org
4. 改めてfileコマンドで変換後のファイルの改行コードを確認。
# file automysqlbackup.sh.org
automysqlbackup.sh.org: Bourne-Again shell script, Non-ISO extended-ASCII text executable
※末尾に「, with CRLF line terminators」がなければOK。
[参考サイト]