質問編集履歴
5
シェルスクリプト内でdockerのバージョンを確認してみた
test
CHANGED
File without changes
|
test
CHANGED
@@ -116,7 +116,26 @@
|
|
116
116
|
|
117
117
|
ほぼ同じ方法でgit cloneした別環境ではどうなのか、日をまたぎますが試そうと思います。
|
118
118
|
|
119
|
+
###
|
120
|
+
今回cronで実行しているシェルスクリプトである``database-backup.sh``末尾に
|
121
|
+
```sh
|
122
|
+
echo "job done"
|
123
|
+
docker -v
|
124
|
+
/usr/bin/docker -v
|
125
|
+
```
|
126
|
+
の3行を追加してみました。
|
127
|
+
↓結果
|
128
|
+
```bash
|
129
|
+
cat /var/log/cron.log
|
130
|
+
echo "job done"
|
131
|
+
Docker version 23.0.1, build a5ee5b1
|
132
|
+
Docker version 23.0.1, build a5ee5b1
|
133
|
+
```
|
134
|
+
「2つのdockerコマンドが独立していてそれぞれのバージョンが異なる」とかはちょっと考えづらいかな?
|
135
|
+
って感想です。
|
119
136
|
|
137
|
+
そもそもdockerコマンドがフルパスかどうかで実行されるコマンドが違うなら、
|
138
|
+
「cronではなく手動で実行した時には意図した動作をしていた」ことの説明がつかない気がしてきました。
|
120
139
|
|
121
140
|
### 補足情報(FW/ツールのバージョンなど)
|
122
141
|
|
4
/usr/local/bin/dockerとは何だったのかの調査
test
CHANGED
File without changes
|
test
CHANGED
@@ -96,7 +96,25 @@
|
|
96
96
|
|
97
97
|
よって根本解決とは言えないので、「未解決」に戻しました。
|
98
98
|
|
99
|
+
### 試したこと3(追記)
|
100
|
+
`` /usr/bin/docker``と`/usr/local/bin/docker`のバージョン確認
|
101
|
+
```bash
|
102
|
+
# /usr/bin/docker -v
|
103
|
+
Docker version 23.0.1, build a5ee5b1
|
99
104
|
|
105
|
+
# /usr/local/bin/docker -v
|
106
|
+
-bash: /usr/local/bin/docker: No such file or directory
|
107
|
+
|
108
|
+
#ls /usr/local/bin/
|
109
|
+
database-backup.sh
|
110
|
+
```
|
111
|
+
確認方法があっているかわかりませんが、``/usr/local/bin/docker``なんて元々いないんじゃ・・・
|
112
|
+
``/usr/local/bin/``には該当のシェルスクリプトがあるだけでした。
|
113
|
+
|
114
|
+
これは憶測ですが、WSL2環境なのでWindows側にインストールされているDocker Desktopを参照しようとしたのか?
|
115
|
+
などとも考えています。
|
116
|
+
|
117
|
+
ほぼ同じ方法でgit cloneした別環境ではどうなのか、日をまたぎますが試そうと思います。
|
100
118
|
|
101
119
|
|
102
120
|
|
3
dockerコマンドが2つ存在することになる?追記しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
docker
|
1
|
+
シェルスクリプト実行時に、dockerコマンドをフルパスで書いたときとそうでないときで挙動が異なる
|
test
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
* * * * * root /bin/bash /usr/local/bin/database-backup.sh >> /var/log/cron.log 2>&1
|
44
44
|
```
|
45
45
|
|
46
|
-
### 試したこと
|
46
|
+
### 試したこと1
|
47
47
|
ログを確認しましたが、データベースの接続情報をハードコーディングしないほうがいいぞ、って警告が出てくるだけです。
|
48
48
|
``cat /var/log/cron.log``
|
49
49
|
```log
|
@@ -57,10 +57,47 @@
|
|
57
57
|
#sqlのデータをコンテナ内の/tmpに書き出し
|
58
58
|
/usr/bin/docker-compose exec -T db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
|
59
59
|
```
|
60
|
-
だけがうまく実行できていないように思えます。
|
60
|
+
~~だけがうまく実行できていないように思えます。~~
|
61
|
+
↓
|
62
|
+
勘違いでした。追記します。
|
61
63
|
|
62
|
-
何か方法があるのでしょうか。
|
63
|
-
|
64
|
+
### 試したこと2(追記)
|
65
|
+
最後の行
|
66
|
+
``docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql``
|
67
|
+
のコマンドをフルパスにしたら意図通りの動きになりました。
|
68
|
+
|
69
|
+
↓
|
70
|
+
|
71
|
+
``/usr/bin/docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql``
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
```sh
|
76
|
+
#!/bin/bash
|
77
|
+
|
78
|
+
projectDirectory=/root/crm-systrem
|
79
|
+
backupDirectory=/tmp/backup
|
80
|
+
|
81
|
+
export PATH=/usr/local/bin:$PATH
|
82
|
+
cd ${projectDirectory}
|
83
|
+
/usr/bin/docker-compose exec -T db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
|
84
|
+
/usr/bin/docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql
|
85
|
+
```
|
86
|
+
|
87
|
+
てっきり下から2行目のコマンド(コンテナ内にいったんバックアップを書き出す)がうまくいっていないとばかり思ってましたがそうではなったということになりますよね。
|
88
|
+
|
89
|
+
ただ、これだとotnさんがおっしゃるように
|
90
|
+
/usr/local/bin/dockerが別物として存在することになりますね。
|
91
|
+
|
92
|
+
``which docker``コマンドで調べると、``/usr/bin/docker``との結果が返ってきました。
|
93
|
+
``export PATH=/usr/local/bin:$PATH``をシェルスクリプト冒頭で宣言していて、フルパスじゃない状態でも違う挙動で動いたので、dockerコマンドが2つあるってことですよね。
|
94
|
+
|
95
|
+
ちょっとこれが何者なのかはまだわかりません。
|
96
|
+
|
97
|
+
よって根本解決とは言えないので、「未解決」に戻しました。
|
98
|
+
|
99
|
+
|
100
|
+
|
64
101
|
|
65
102
|
|
66
103
|
### 補足情報(FW/ツールのバージョンなど)
|
2
ログを取得するためのオプションを追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
cd ${projectDirectory}
|
27
27
|
|
28
28
|
#sqlのデータをコンテナ内の/tmpに書き出し
|
29
|
-
/usr/bin/docker-compose exec db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
|
29
|
+
/usr/bin/docker-compose exec -T db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
|
30
30
|
|
31
31
|
#コンテナ内に書き出したデータを、コンテナ外にコピー
|
32
32
|
docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql
|
@@ -44,19 +44,18 @@
|
|
44
44
|
```
|
45
45
|
|
46
46
|
### 試したこと
|
47
|
-
ログを確認しましたが、う
|
47
|
+
ログを確認しましたが、データベースの接続情報をハードコーディングしないほうがいいぞ、って警告が出てくるだけです。
|
48
48
|
``cat /var/log/cron.log``
|
49
49
|
```log
|
50
|
-
|
50
|
+
mysqldump: [Warning] Using a password on the command line interface can be insecure.
|
51
51
|
```
|
52
|
-
ログを取得する方法もあるのかもしれませんが、WSL2環境特有の問題かもしれません。
|
53
|
-
|
52
|
+
これは普段成功するときも出ます。
|
54
53
|
|
55
54
|
手動でシェルスクリプトを呼び出したときは正しく動作するのに、
|
56
55
|
cronで呼び出すと、
|
57
56
|
```
|
58
57
|
#sqlのデータをコンテナ内の/tmpに書き出し
|
59
|
-
/usr/bin/docker-compose exec db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
|
58
|
+
/usr/bin/docker-compose exec -T db bash -c 'mysqldump --no-tablespaces -u hogehoge -phogehoge laravel_local > /tmp/dump.sql'
|
60
59
|
```
|
61
60
|
だけがうまく実行できていないように思えます。
|
62
61
|
|
1
誤字修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
### 発生している問題・エラーメッセージ
|
15
15
|

|
16
16
|
|
17
|
-
18:30
|
17
|
+
18:30に``/bin/bash /usr/local/bin/database-backup.sh``
|
18
18
|
を手動で実行しました。
|
19
19
|
|
20
20
|
シェルスクリプトの中身は下記です。
|
@@ -32,7 +32,7 @@
|
|
32
32
|
docker cp `docker-compose ps -q db`:/tmp/dump.sql ${backupDirectory}/sql/backup_`date +%Y%m%d%H%M`.sql
|
33
33
|
```
|
34
34
|
|
35
|
-
18:30
|
35
|
+
18:30のタイムスタンプで``backup_202303051830.sql``というファイルが、
|
36
36
|
コンテナの外である``\\wsl.localhost\Ubuntu\tmp\backup\sql``に無事生成されました。
|
37
37
|
|
38
38
|
しかし、このスクリプトをcrondから実行すると、タイムスタンプが過去の時間で中身の更新されていないデータが生成されてしまいます。(上記スクショ参照)
|