WebサイトとそれをサポートするすべてのMySQLデータベースをバックアップするシェルスクリプトを作成しようとしています。私はオンラインでいくつかの例を見つけましたが、刑務所に閉じ込められたSSHセッション内のbashでスクリプトを実行すると失敗します。 SSHセッションに直接コマンドを入力すると正常に動作します。
#!/bin/sh
DB1="first_db"
THEDATE=$(date +"%Y-%m-%d")
THEUSER=user
THEDBPW=password
mysqldump -u $THEDBUSER -p$THEDBPW $DB1 > dbbackup_$DB1_$THEDATE.sql
tar -czf sitebackup_website_$THEDATE.tar /home/website/public_html
gzip sitebackup_website_$THEDATE.tar
スクリプトはWebサーバーにあるため、テスト目的でサーバーのcd
ディレクトリにSSHで接続して実行しましたbash backup.sh
。 mysqldump
接続されておらず、パスワードを渡すことができないようです(「パスワードの使用:いいえ」というエラーレポートが返されました)。 「)。その後、tarコマンドが失敗し、/home/website/public_html
「該当するファイルまたはディレクトリが見つかりませんでした」と計算できないことが報告され tar
ます。
私がここで何を見逃しているのでしょうか?
答え1
サーバーにログインし、次のコマンドを実行してスクリプトのWindows行末を確認します。
cat -v /path/to/script
行がで終わると^M
問題になります。
以下を実行して、壊れた行末を含むファイルを変更できます。
dos2unix /path/to/script
dos2unixがサーバーにない場合は、次のようにsedを使用できます。
sed -i 's/\r$//' /path/to/script
答え2
ユーザー名を変数に割り当てましたが、THEUSER
コマンドmysqldump
はその変数を使用していますTHEDBUSER
。
答え3
tardir=$PWD ; cd /home/website/public_html &&
tar -czf "$tardir"/sitebackup_complete-office_"$THEDATE.tar"
それ以外の場合:
tar -C/home/website/public_html -czf \
sitebackup_complete-office_"$THEDATE.tar"
通常、多くの人は次のようなtars
場合を除き、絶対パスを使用できません。明確なガイドラインこの方法。
デフォルトでは、GNU tarは入力または出力から先行文字を削除し、コンポーネントを含む
/
ファイル名について文句を言います..
。このオプションはこの動作をオフにします。
ssh's
コマンドがコマンドパスと参照に基づいてパスを事前確認することは完全に可能です。これは、パス名の変数拡張に関連しています。
答え4
問題の説明を正しく理解した場合、主な違いは次のとおりです。刑務所SSHセッション - 刑務所に閉じ込められたセッションで実行されているプロセスは、刑務所ディレクトリ(通常はホームディレクトリ)以外のコンテンツを表示できません。これが非監禁セッションに問題がない理由です。また、見ることができますウィキペディア刑務所の入り口詳細については。