私は、〜10 GBのデータベース+〜1 GBのコード+〜5 GBのメディアで構成される多くのデータを含むMagento 2プロジェクトを進めています。
私のローカルサーバーに設定したいです。だから私はデータベースを使用してプロジェクト全体を圧縮したいと思います。
このコマンドを使用してデータベースバックアップを作成しようとしています。
# mysqldump -u magento2_user -p magento2_db > magento2_db-20201110.sql
データベースのバックアップを作成するには半日〜6時間かかり、このプロセス中にsh接続がバックアップされるため、バックアップを再作成する必要があります。
これで、コマンドをバックアップするためのより良い戦略ができました。
website:
tar -czvf ~/multi_dump.tar.gz --exclude=var/cache --exclude=var/session --exclude=var/log --exclude=var/tmp --exclude=var/export --exclude=var/report --exclude=var/backups --exclude='media/*import*' --exclude=media/tmp --exclude=media/downloadable --exclude=media/catalog . && echo OK
database:
mysqldump --single-transaction --add-drop-table -h <host> -u <user> -p <db_name> | gzip > dump.sql.gz
これは非常に長く時間がかかる作業です。
そのため、バックグラウンドで自動化されたプロセスでデータベースバックアップを作成する方法を探しています。
私は見つかったCtrl+Z
、、bg
。jobs
これは、このプロセスをバックグラウンドに追加することを意味します。ただし、sshを切断して再接続すると、jobs
andコマンドでbg
プロセスが見つかりません。
また、このプロセスを追加しようとしましたが、crontab -e
まだアクセスできません。
それでは、この問題に対するより良い解決策を持っている人はいますか?
オペレーティングシステムの詳細です。
答え1
tmux(またはscreen)は実際には良いソリューションですが、追加のパッケージが必要です。
Pankiが提案したように使用するのは、nohup
おそらく* nixの世界での移植性のための最良の解決策でしょう。しかし、Ubuntu 16にはsystemdが付属しているので、次のものを使用できます。systemd-run
スタートコマンド:
systemd-run --unit=my_backup --remain-after-exit mysqldump --single-transaction --add-drop-table -h <host> -u <user> -p <db_name> -r magento2_db-20201110.sql
その後、通常のsystemdコマンドを使用してステータスと出力にアクセスできます。
journalctl -b -u my_backup
systemctl status my_backup
追加のsystemd-runオプションを使用すると、バックアップに使用されるリソースを簡単に制限できます。男1システム実行。
いくつかの説明:
--remain-after-exit
my_backup.service は、 mysqldump が完了した後も維持される必要があるサービスの状態とログを照会できます (journalctl を介して)。--unit
systemd-runで開始されたサービスを必要に応じて名前を付けることができます。-r
標準出力リダイレクトを避けるために mysqldump オプションを使用します。
systemd-run で始まるすべてのコマンドは、コマンドを終了せずにリモート SSH アクセスをオフにできます。
答え2
最初からバックグラウンドでプロセスを実行してみることができます。
$ nohup mysqldump -u magento2_user -p magento2_db > magento2_db-20201110.sql &
nohup
絶え間ない現象から人を守りましょう。これは、端末またはSSHセッションが閉じた後もプロセスがバックグラウンドで続行されることを意味します。&
シェルと呼ばれるものをコマンドに追加してバックグラウンドで実行します。
コマンドの実行中に発生する可能性のあるエラーを追跡するには、それを追加することもできます。
$ nohup mysqldump -u magento2_user -p magento2_db > magento2_db-20201110.sql 2>error.log &
これは、実行中のプロセスがこのファイルにリダイレクトされることを意味します2>error.log
。stderr
error.log
答え3
ターミナルマルチプレクサをインストールします。マルチプレクサそれはオプションかもしれませんか?
サーバーにログインします。
ssh user@srv
その後、tmuxを起動します。
tmux new -s main
リモートサーバーへの別の接続を開くと、tmuxセッションはまだ存在します。
tmux -a t main
編集する
私はこれを試してみました:
cat .foo.sh
#!/bin/bash
while [ 1 ]; do echo "OK"; sleep 120; done;
chmod +x .foo.sh
trap './foo.sh &' exit
# exit from ssh session
exit
もう一度ログインしてください。
ssh user@srv
ps -U $USER -o cmd,pid | grep "foo"
/bin/bash ./foo.sh 3099
本質的に罠コマンドは、終了信号を受信するとスクリプトを呼び出します。もちろんあなたはあなたのMySQLダンプcmd で実行するスクリプトです。