haiju's 開発メモ

開発に必要な情報を自分用にメモ

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。

[参考サイト]

qiita.com

qiita.com

www.unix-power.net