一.前言
最近發現rsync挺好用的……不過參數有點多,所以這兒寫一篇給自己以后要用的時候做個參考。
二.參數說明
這兒全是我翻資料連蒙帶猜(有些實在是不好解釋)翻譯出來的,請各位轉載的留個名啊,雖然不是多高端的,但是也賊煩
①.daemon(服務端)模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
用途
: rsync --daemon [選項]...
選項
--address=ADDRESS 綁定到指定的地址
--bwlimit=RATE 限制套接字I/O帶寬
--config=FILE 不使用默認位置的rsyncd.conf文件,額外指定
-M, --dparam=OVERRIDE 覆蓋全局守護進程配置參數
--no-detach 不要進行fork並后台運行
--port=PORT 監聽指定的端口
--log-file=FILE 輸出日志到指定文件
--log-file-format=FMT 用指定格式更新日志
--sockopts=OPTIONS 指定自定義的TCP選項
-v, --verbose 詳細模式輸出
-4, --ipv4 偏向於使用IPv4
-6, --ipv6 偏向於使用IPv6
--help 顯示幫助信息
|
②.普通(客戶端)模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
用途
: rsync [OPTION]... SRC [SRC]... DEST
通過遠程
shell訪問方式:
rsync [選項]... [用戶名@]HOST:SRC [DEST]
rsync [選項]... SRC [SRC]... [用戶名@]HOST:DEST
通過
rsync daemon訪問方式:
rsync [選項]... [用戶名@]HOST::SRC [DEST]
rsync [選項]... SRC [SRC]... [用戶名@]HOST::DEST
rsync [選項]... SRC [SRC]... rsync://[用戶名@]HOST[:PORT]/DEST
rsync [選項]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
請注意,
':'會使用ssh來遠程連接,而'::'以及'rsync://'則用於以tcp方式連接一個rsync daemon服務器,這個需要SRC(源),以及包含模塊名字的DEST(目的)
選項
-v, --verbose 詳細模式輸出
--info=FLAGS 輸出INFO級別
--debug=FLAGS 輸出DEBUG級別
--msgs2stderr 用於調試的特殊輸出處理
-q, --quiet 忽略非error的輸出
--no-motd 忽略Daemon模式的MOTD
-c, --checksum 讓自動跳過基於校驗和而非默認的修改時間以及文件大小
-a, --archive 歸檔(壓縮)模式,表示以遞歸方式傳輸文件,並保持所有文件屬性等同於-rlptgoD(無 -H,-A,-X)
--no-OPTION 關閉隱含的選項(例如 --no-D)
-r, --recursive 對子目錄以遞歸模式處理
-R, --relative 使用相對路徑信息
--no-implied-dirs 不使用--relative發送隱含的目錄
-b, --backup 創建備份,也就是對於目的已經存在有同樣的文件名時,將老的文件重新命名為~filename.可以使用--suffix選項來指定不同的備份文件前綴
--backup-dir=DIR 將備份文件(如~filename)存放在指定目錄下
--suffix=SUFFIX 定義備份文件前綴,默認是~
-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且文件時間晚於要備份的文件(不覆蓋更新的文件)
--inplace update destination files in-place (SEE MAN PAGE)
--append 將數據附加到較短的文件
--append-verify 類似--append,但是對舊數據會計算校驗和
-d, --dirs 不使用遞歸傳輸目錄
-l, --links 不處理符號鏈接(保留符號鏈接)
-L, --copy-links 將符號鏈接處理為具體的文件或者文件夾
--copy-unsafe-links 只處理不安全的符號鏈接
--safe-links 忽略不在SRC源目錄的符號鏈接
--munge-links munge符號鏈接使它們更安全(但會無法使用)
-k, --copy-dirlinks 把指向文件夾的符號鏈接轉換為文件夾
-K, --keep-dirlinks 把接收端的指向文件夾的符號鏈接當做文件夾
-H, --hard-links 保留硬鏈接
-p, --perms 保留權限
-E, --executability 保留文件的可執行屬性
--chmod=CHMOD 影響文件或文件夾的屬性
-A, --acls 保留ACLs (代表--perms)
-X, --xattrs 保留擴展屬性
-o, --owner 保留所有者(僅限superuser)
-g, --group 保留組
--devices 保留設備文件(僅限superuser)
--copy-devices 把設備文件內容當做文件一樣進行復制處理
--specials 保留特殊文件
-D 和--devices --specials一樣
-t, --times 保留修改時間
-O, --omit-dir-times 忽略文件夾的修改時間
-J, --omit-link-times 忽略符號鏈接的修改時間
--super 接收端嘗試使用superuser進行操作
--fake-super 使用xattrs來存儲和恢復權限屬性
-S, --sparse 對稀疏文件進行特殊處理以節省空間
--preallocate 在寫入前預分配DST文件
-n, --dry-run 執行一個沒有實際更改的試運行,只會顯示文件會被如何操作
-W, --whole-file 拷貝文件,不進行增量檢測
-x, --one-file-system 不要跨越文件系統邊界
-B, --block-size=SIZE 檢驗算法使用的塊尺寸,默認是700字節
-e, --rsh=COMMAND 指定使用rsh,ssh方式進行數據同步
--rsync-path=PROGRAM 指定遠程服務器上的rsync命令所在路徑
--existing 僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件
--ignore-existing 跳過更新已存在於DST的文件
--remove-source-files 發送方刪除非文件夾的源文件
--del --delete-during的一個alias
--delete 刪除那些DST中SRC沒有的文件
--delete-before 傳輸前刪除,而非傳輸過程中
--delete-during 在傳輸過程中刪除
--delete-delay 在傳輸過程中確定要刪除的,在傳輸結束后進行刪除
--delete-after 在傳輸結束后刪除,而非傳輸過程中
--delete-excluded 同樣刪除接收端那些被該選項指定排除的文件
--ignore-missing-args 忽略丟失的源參數不輸出錯誤
--delete-missing-args 從DEST刪除丟失的源參數
--ignore-errors 即使出現I/O錯誤也進行刪除
--force 即使文件夾非空也強制刪除
--max-delete=NUM 不刪除超過指定數量的文件
--max-size=SIZE 不傳輸超過指定大小的文件
--min-size=SIZE 不傳輸小於指定大小的文件
--partial 保留那些因故沒有完全傳輸的文件,以是加快隨后的再次傳輸(即斷點續傳)
--partial-dir=DIR 將因故沒有完全傳輸的文件放到指定文件夾
--delay-updates 在傳輸末尾把所有更新的文件放到位
-m, --prune-empty-dirs 從文件列表中刪除空目錄鏈
--numeric-ids 不要把uid/gid值映射為用戶/組名
--usermap=STRING 自定義用戶名映射
--groupmap=STRING 自定義組名映射
--chown=USER:GROUP 簡單的用戶/組名映射
--timeout=SECONDS 設置I/O超時,單位為秒
--contimeout=SECONDS 設置Daemon連接超時,單位為秒
-I, --ignore-times 不跳過那些有同樣的時間和大小的文件
-M, --remote-option=OPTION 只把指定選項發送到遠端
--size-only 只跳過大小相同的文件
--modify-window=NUM 決定文件是否時間相同時使用的時間戳窗口,默認為0
-T, --temp-dir=DIR 在指定文件夾中創建臨時文件
-y, --fuzzy 如果DEST沒有任何文件,查找類似的文件
--compare-dest=DIR 同樣比較DIR中的文件來決定是否需要備份
--copy-dest=DIR 和上面的類似,但是還會復制指定文件夾中的沒有改變的文件
--link-dest=DIR 和上面類似,只是沒有改變的文件會被硬鏈接到DST
-z, --compress 在傳輸過程中進行壓縮
--compress-level=NUM 指定壓縮級別0-9,默認為6
--skip-compress=LIST 跳過壓縮文件后綴在指定列表中的文件
-C, --cvs-exclude 自動跳過CVS的生成文件
-f, --filter=RULE 添加一個文件過濾規則
-F 等於--filter='dir-merge /.rsync-filter'
重復的: --filter='- .rsync-filter'
--exclude=PATTERN 排除符合匹配規則的文件
--exclude-from=FILE 從指定文件中讀取需要排除的文件
--include=PATTERN 包含(不排除)符合匹配規則的文件
--include-from=FILE 從指定文件中讀取需要包含(不排除)的文件
--files-from=FILE 從指定文件中讀取SRC源文件列表
-0, --from0 從文件中讀取的文件名以'\0'終止
-s, --protect-args 沒有空格分隔;只有通配符的特殊字符
--address=ADDRESS 綁定到指定的地址
--port=PORT 指定其他的rsync服務端口
--sockopts=OPTIONS 指定自定義的TCP選項
--blocking-io 對遠程shell使用阻塞IO
--stats 提供某些文件的傳輸狀態
-8, --8-bit-output 在輸出中留下高比特的字符
-h, --human-readable 用人類可讀的格式輸出數字
--progress 在傳輸過程中顯示進度
-P 等同於--partial --progress
-i, --itemize-changes 輸出對所有更新的變更摘要
--out-format=FORMAT 用指定格式輸出更新
--log-file=FILE 將日志保存到指定文件
--log-file-format=FMT 用指定格式更新日志
--password-file=FILE 從文件讀取Daemon服務器密碼
--list-only 不復制而是只列出
--bwlimit=RATE 限制套接字I/O帶寬
--outbuf=N|L|B 設置輸出緩沖,為None,Line或者Block
--write-batch=FILE 寫入批量更新到指定文件
--only-write-batch=FILE 和上面類似,但是對DST進行只寫的更新
--read-batch=FILE 從指定文件讀取一個批量更新
--protocol=NUM 強制使用指定的老版本協議
--iconv=CONVERT_SPEC 對文件名進行字符編碼轉換
--checksum-seed=NUM 設置塊/文件的校驗和種子
-4, --ipv4 偏向於使用IPv4
-6, --ipv6 偏向於使用IPv6
--version 打印版本號
(-h) --help 顯示幫助信息
|
三.服務端配置
服務端配置文件默認位置/etc/rsyncd.conf
分為兩塊,最開頭的是全局參數,部分可以由daemon進程運行參數覆蓋,如下
參數 | 說明 | 默認值 |
---|---|---|
address | 在獨立運行時,用於指定的服務器運行的 IP 地址。由 xinetd 運行時將忽略此參數,使用命令行上的 –address 選項替代。 | 本地所有IP |
port | 指定 rsync 守護進程監聽的端口號。 由 xinetd 運行時將忽略此參數,使用命令行上的–port 選項替代。 | 873 |
motd file | 指定一個消息文件,當客戶連接服務器時該文件的內容顯示給客戶。 | 無 |
pid file | rsync 的守護進程將其 PID 寫入指定的文件。 | 無 |
log file | 指定 rsync 守護進程的日志文件,而不將日志發送給 syslog。 | 無 |
syslog facility | 指定 rsync 發送日志消息給 syslog 時的消息級別。 | daemon |
socket options | 指定自定義 TCP 選項。 | 無 |
另外的就是模塊參數了
1.基礎參數
參數 | 說明 | 默認值 |
---|---|---|
path | 指定當前模塊在 rsync 服務器上的同步路徑,該參數是必須指定的。 | 無 |
comment | 給模塊指定一個描述,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶。 | 無 |
2.控制參數
參數 | 說明 | 默認值 |
---|---|---|
use chroot | 若為 true,則 rsync 在傳輸文件之前首先 chroot 到 path 參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要 root 權限,並且不能備份指向 path 外部的符號連接所指向的目錄文件。 | true |
uid | 指定該模塊以指定的 UID 傳輸文件。 | nobody |
gid | 指定該模塊以指定的 GID 傳輸文件。 | nobody |
max connections | 指定該模塊的最大並發連接數量以保護服務器,超過限制的連接請求將被告知隨后再試。 | 0(沒有限制) |
lock file | 指定支持 max connections 參數的鎖文件。 | /var/run/rsyncd.lock |
list | 指定當客戶請求列出可以使用的模塊列表時,該模塊是否應該被列出。如果設置該選項為 false,可以創建隱藏的模塊。 | true |
read only | 指定是否允許客戶上傳文件。若為 true 則不允許上傳;若為 false 並且服務器目錄也具有讀寫權限則允許上傳。 | true |
write only | 指定是否允許客戶下載文件。若為 true 則不允許下載;若為 false 並且服務器目錄也具有讀權限則允許下載。 | false |
ignore errors | 指定 在 rsync 服務器上運行 delete 操作時是否忽略 I/O 錯誤。一般來說 rsync 在出現 I/O 錯誤時將將跳過 –delete 操作,以防止因為暫時的資源不足或其它 I/O 錯誤導致的嚴重問題。 | true |
ignore nonreadable | 指定 rysnc 服務器完全忽略那些用戶沒有訪問權限的文件。這對於在需要備份的目錄中有些不應該被備份者獲得的文件時是有意義的。 | false |
timeout | 該選項可以覆蓋客戶指定的 IP 超時時間。從而確保 rsync 服務器不會永遠等待一個崩潰的客戶端。對於匿名 rsync 服務器來說,理想的數字是 600(單位為秒)。 | 0 (未限制) |
dont compress | 用來指定那些在傳輸之前不進行壓縮處理的文件。該選項可以定義一些不允許客戶對該模塊使用的命令選項列表。必須使用選項全名,而不能是簡稱。當發生拒絕某個選項的情況時,服務器將報告錯誤信息然后退出。例如,要防止使用壓縮,應該是:”dont compress = *”。 | *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz |
3.文件過濾參數
參數 | 說明 | 默認值 |
---|---|---|
exclude | 指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 –exclude 來指定模式。 | 空 |
exclude from | 指定一個包含 exclude 規則定義的文件名,服務器從該文件中讀取 exclude 列表定義。 | 空 |
include | 指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 include 列表中。這等同於在客戶端命令中使用 –include 來指定模式 。 | 空 |
include from | 指定一個包含 include 規則定義的文件名,服務器從該文件中讀取 include 列表定義。 | 空 |
- 一個模塊只能指定一個 exclude 參數、一個 include 參數。
- 結合 include 和 exclude 可以定義復雜的 exclude/include 規則 。
- 這幾個參數分別與相應的 rsync 客戶命令選項等價,唯一不同的是它們作用在服務器端。
4.用戶認證參數
參數 | 說明 | 默認值 |
---|---|---|
auth users | 指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這里的用戶和系統用戶沒有任何關系。用戶名和口令以明文方式存放在 secrets file 參數指定的文件中。 | (匿名方式) |
secrets file | 指定一個 rsync 認證口令文件。只有在 auth users 被定義時,該文件才起作用。 | 空 |
strict modes | 指定是否監測口令文件的權限。若為 true 則口令文件只能被 rsync 服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。 | true |
- rsync 認證口令文件的權限一定是 600,否則客戶端將不能連接服務器。
- rsync 認證口令文件中每一行指定一個"用戶名:口令"對,格式為:
1
2
3
|
# 以 "#" 開始的行為注釋行
username:passwd
# 一般來說口令最好不要超過8個字符。
|
5.訪問控制參數
參數 | 說明 | 默認值 |
---|---|---|
hosts allow | 用一個主機列表指定哪些主機客戶允許連接該模塊。不匹配主機列表的主機將被拒絕。 | * |
hosts deny | 用一個主機列表指定哪些主機客戶不允許連接該模塊。 | 空 |
客戶主機列表定義可以是以下形式:
- 單個IP地址。例如:192.168.0.1
- 整個網段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0
- 可解析的單個主機名。例如:centos,centos.smartraining.cn
- 域內的所有主機。例如:*.smartraining.cn
- “*”則表示所有。
- 多個列表項要用空格間隔。
6.日志參數
參數 | 說明 | 默認值 |
---|---|---|
transfer logging | 使 rsync 服務器將傳輸操作記錄到傳輸日志文件。 | false |
log format | 指定傳輸日志文件的字段。 | ”%o %h [%a] %m (%u) %f %l” |
設置了”log file”參數時,在日志每行的開始會添加”%t [%p]“。
- 可以使用的日志格式定義符如下所示:
- %a - 遠程IP地址
- %h - 遠程主機名
- %l - 文件長度字符數
- %p - 該次 rsync 會話的 PID
- %o - 操作類型:”send” 或 “recv”
- %f - 文件名
- %P - 模塊路徑
- %m - 模塊名
- %t - 當前時間
- %u - 認證的用戶名(匿名時是 null)
- %b - 實際傳輸的字節數
- %c - 當發送文件時,記錄該文件的校驗碼
這部分是網上看得,實在懶得翻譯man了,具體來源完全不知道,我看到那位仁兄也是轉載來的……
這兒拿我前一篇文章寫的舉個栗子方便解釋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
cat >/etc/rsyncd.conf<<'EOF'
#指定傳輸文件時守護進程具有的用戶ID,這里表示默認為nobady
uid=nobady
#指定傳輸文件時守護進程具有的用戶組ID,這里表示默認為nobady
gid=nobody
#禁止切換目錄
use chroot=no
#客戶端的最大連接數
max connection=10
#檢查口令文件的權限,口令文件的權限用戶屬組必須是root,權限必須是600
strict modes=yes
#pid文件的位置
pid file=/var/run/rsyncd.pid
#lock文件的位置
lock file=/var/run/rsyncd.lock
#日志文件的位置
log file=/var/log/rsyncd.log
#定義模塊名,這玩意就是客戶端命令跟在IP后面的,作為DST的一部分
[plex]
#指定這個模塊需要同步的路徑,或者說作為base目錄
path=/home/plex/movie
#這個是注釋 可以自己定義
comment=plex library
#忽略一些無關的IO錯誤
ignore errors
#no代表客戶端可以上傳文件,yes表示只讀取
read only=no
#no表示客戶端可以下載文件,yes表示不能下載
write only=no
#表示允許連接的主機地址
hosts allow=1.2.3.4
#表示不允許連接的主機地址
hosts deny=*
#不允許該模塊被客戶端列出
list=false
#指定傳輸文件時守護進程具有的用戶ID,
uid=root
#指定傳輸文件時守護進程具有的用戶組ID,
gid=root
#用來指定連接該模塊的用戶名,用戶名可以自定義,這個是客戶端命令跟在IP前面那個
auth users=plex
#指定密碼文件,文件里面記錄的是用戶名:密碼
secrets file=/etc/srs.pass
EOF
echo "用戶名:密碼" >/etc/srs.pass
#權限必須600,不然GG
chmod 600 /etc/srs.pass
#開機啟動
echo "rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
#立即運行服務端,其實這兒的配置文件位置就是默認的,可以不加--config
rsync --daemon --config=/etc/rsyncd.conf
|
四.客戶端命令
如果配置了密碼,請務必先丟個密碼文件,然后保證它的權限為600
1
2
|
echo "密碼" >/etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass
|
這樣能列出服務端可同步的文件(如果搞單向同步你肯定就用不着這個了
1
2
|
rsync --list-only --password-file=/etc/rsyncd.pass plex@1.2.3.4::plex
rsync --list-only --password-file=/etc/rsyncd.pass rsync://plex@1.2.3.4/plex
|
然后手動同步我們可以這樣(當然手動是可以不指定password-file的,反正會提示你輸密碼,如果寫到腳本或者crontab里就必須帶上了)
1
2
|
rsync -avzP --delete --exclude "*.torrent" /home/complete/ plex@1.2.3.4::plex
rsync -avzP --delete /home/complete/ rsync://plex@1.2.3.4/plex
|
敲黑板,P參數是給你看着玩的,不然鬼知道同步到啥程度了,寫腳本里就別帶了,單向傳輸腳本里如果要那個斷點續傳請自己做好命令返回狀態的判斷,因為單向傳輸是一次性的,如果是同步就沒必要了,畢竟你會隔陣子就運行
z是壓縮,如果你cpu不行或者需要降低資源消耗,可以帶上--compress-level來減小下壓縮率,0-9哦,從低到高資源消耗越來越大,當然你也可以不壓縮,文本內容我覺得開個1或者2就很給力了
五.常見錯誤
問題一:
1
2
3
4
5
|
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器端的目錄不存在或無權限,創建目錄並修正權限可解決問題
|
問題二:
1
2
3
4
5
6
|
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器端該模塊(
backup)需要驗證用戶名密碼,但客戶端沒有提供正確的用戶名密碼,認證失敗
提供正確的用戶名密碼解決此問題
|
問題三:
1
2
3
4
5
|
@ERROR: Unknown module ‘backup'
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服務器不存在指定模塊。提供正確的模塊名或在服務器端修改成你要的模塊以解決問題
|
問題四:
1
2
3
4
5
6
|
password file must not beother-accessible
continuing without password file
Password:
原因:
這是因為
rsyncd.pwd rsyncd.secrets的權限不對,應該設置為600。如:chmod 600 rsyncd.pwd
|
問題五:
1
2
3
4
5
|
rsync: failed to connect to218.107.243.2: No route to host (113)
rsync error: error in socket IO(code 10) at clientserver.c(104) [receiver=2.6.9]
原因:
對方沒開機、防火牆阻擋、通過的網絡上有防火牆阻擋,都有可能。關閉防火牆,其實就是把
tcp udp的873端口打開
|
問題六:
1
2
3
4
|
rsync error: error startingclient-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:
/etc/rsyncd.conf配置文件內容有錯誤。請正確核對配置文件
|
問題七:
1
2
3
4
|
rsync: chown "" failed:Invalid argument (22)
原因:
權限無法復制。去掉同步權限的參數即可。
(這種情況多見於Linux向Windows的時候)
|
問題八:
1
2
3
4
5
|
@ERROR: daemon security issue –contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530)[sender=3.0.6]
原因:
同步的目錄里面有軟連接文件,需要服務器端的
/etc/rsyncd.conf打開use chroot = yes。掠過軟連接文件
|
六.配合inotify使用
inotify我之前在搭建dns來同步配置的時候就用過——>傳送門
1
2
3
4
5
6
7
8
9
|
#!/bin/bash
src=/data/
dst=backup
host="1.2.3.4"
while inotifywait -rq -e modify,delete,create,attrib $zonefile >/dev/null; do
rsync -avz --delete --password-file=/etc/rsync.pass $src rsync@$host::$dst
echo -e "`date "+%Y-%m-%d %H:%M:%S"` File Changed, Synced">>/tmp/rsync.log
done
|
簡單的一個腳本,可以監控/data/目錄,遞歸模式,任何修改,刪除,創建,修改屬性的事件都會觸發同步並記錄到日志中,對於要自動化處理某些東西挺好用的