終了スクリプトが2回実行されたようです。

終了スクリプトが2回実行されたようです。

職場でコンピュータ用に作成する小さなバックアップbashスクリプトがあります。終了時に最初に実行されるようにスクリプトをコピーして/etc/rc0.d/呼び出しました。K01backupマイコンピュータ(Ubuntu 14.04LTSを実行)、作業コピー、および別々の内部SSD上の仮想マシンのすべてのデータを外部ハードドライブにバックアップし、各フォルダのファイルにログ出力を追加します。

スクリプトは次のとおりです。

#!/bin/bash

LOG="/syncLog"
VMORIG="/media/SSDData/VM"
PROJORIG="/media/Data/Projects"
DESTROOT="/media/ExtData/Backups"
LOGVM=${DESTROOT}"/VM"${LOG}
LOGPROJ=${DESTROOT}"/Projects"${LOG}
ALLORIG="/"
DESTALL=${DESTROOT}"/All"
LOGALL=${DESTROOT}"/All"${LOG}


echo "STARTED" > ${LOGPROJ}
date +%d.%m.%Y/%H:%M:%S >> ${LOGPROJ}
rsync -avvx --progress --no-whole-file ${PROJORIG} ${DESTROOT} >> ${LOGPROJ}
echo "FINISHED" >> ${LOGPROJ}
date +%d.%m.%Y/%H:%M:%S >> ${LOGPROJ}

echo "STARTED" > ${LOGVM}
date +%d.%m.%Y/%H:%M:%S >> ${LOGVM}
rsync -avvx --progress --no-whole-file  ${VMORIG} ${DESTROOT} >> ${LOGVM}
echo "FINISHED" >> ${LOGVM}
date +%d.%m.%Y/%H:%M:%S >> ${LOGVM}

echo "STARTED" > ${LOGALL}
date +%d.%m.%Y/%H:%M:%S >> ${LOGALL}
rsync -avvx --progress --no-whole-file --exclude "/media/*" --exclude "/indel/*" ${ALLORIG} ${DESTALL} >> ${LOGALL}
echo "FINISHED" >> ${LOGALL}
date +%d.%m.%Y/%H:%M:%S >> ${LOGALL}

sudo chmod +x /etc/rc0.d/K01backupその後、実行可能にするために実行しました。最初はスクリプトを実行するのに約1時間かかり、すべてが順調に進みました。ただし、ログファイルでスクリプトが起動したことがわかります(おそらく再起動した) 退勤して 1 時間ほど経つと、すでにすべてのファイルが最新の状態なので、実行には 1 分ほどしかかかりませんでした。

私が間違っていることを知っている人はいますか?

ベストアンサー1

このディレクトリの追加情報ファイルには、このディレクトリのスクリプトが停電時に(再起動時ではない)一度だけ呼び出されることが示されています。

簡単なテストプログラムの使用

#!/bin/bash

LOG=/root/backup.log
date >> $LOG
echo $* >> $LOG

私はある時点でプログラムが実際に2回呼び出されたことに気づきました。一度は引数なしで、一度は「stop」引数を使用して呼び出されました。しかし、私はそれを再現することはできません。

実際の呼び出しパラメータをプログラムに記録し、$1スクリプトテストにも記録することをお勧めしますstop

このプログラムを挿入しbackup/etc/init.dこのスクリプトへのリンクを設定する方がより慣用的ですが、/etc/rc0.d/K01backupこれは何らかの方法で動作に影響を与えてはなりません。これらの項目を管理するすべてのツールは、これらのリンクを作成/削除できます。

このデフォルトスクリプトを試した結果、OPは編集したファイルにバックアップファイルがあることを発見しました。そのファイル/etc/rc0.d/K01backup~も実行されました。backupファイルを挿入して最初からリンクすると、/etc/init.d/これは発生しません(ファイルが存在するかどうか/etc/init.d/backup~)。

おすすめ記事