shell實(shí)現(xiàn)兩臺(tái)服務(wù)器的文件實(shí)時(shí)同步
共 2676字,需瀏覽 6分鐘
·
2024-06-20 17:33
關(guān)注上面公眾號(hào)回復(fù)“激活碼”,獲取最新永久激活碼
背景
如果要實(shí)現(xiàn)兩臺(tái)服務(wù)器的文件的熱備份,要怎么做呢?使用shell腳本可以輕松實(shí)現(xiàn)。
分析
實(shí)現(xiàn)文件實(shí)時(shí)監(jiān)控的命令為: inotifywait 。
當(dāng)文件有新增、修改、刪除等操作時(shí),這個(gè)文件監(jiān)控就會(huì)觸發(fā)事件,來通知你。
文件同步的命令為:rsync 。
這個(gè)可以將文件從一臺(tái)服務(wù)器快速同步到另外一臺(tái)服務(wù)器。
將inotifywait 和 rsync 結(jié)合起來就可以實(shí)現(xiàn)實(shí)時(shí)同步的熱備效果了。
下面是完整的腳本:
#!/bin/bash
CONFIG_FILE="config.txt"
# 讀取配置文件,格式為:源目錄:目標(biāo)目錄
read_config_file() {
while IFS=: read -r source_dir target_dir; do
if [[ $source_dir && $target_dir ]]; then
inotifywait -m -r -e modify,create,delete "$source_dir" |
while read path action file; do
rsync -avz "$source_dir/" root@目標(biāo)IP:"$target_dir/"
done &
fi
done < "$CONFIG_FILE"
}
# 主函數(shù)入口
main() {
if [[ -f "$CONFIG_FILE" ]]; then
read_config_file
else
echo "配置文件 $CONFIG_FILE 不存在."
fi
}
# 執(zhí)行主函數(shù)
main
配置文件config.txt:
/data/sync/watched:/data/sync/watched
總結(jié)
文件實(shí)時(shí)同步,借助inotifywait 和 rsync 就可以輕松實(shí)現(xiàn)。
shell中將多行文本輸出到文件里
背景
有時(shí)候不想復(fù)制文件,而是想直接將一段字符串直接按照多行輸出到文件里。這樣操作非常方便。Shell中echo輸出內(nèi)容不換行的效果實(shí)現(xiàn)
分析
如果只是想將單行內(nèi)容輸出到文件里,使用echo即可。
echo "這是內(nèi)容" > test.txt
如果要輸出多行到文件里呢?
echo "1 2 3 " > test.txt
這樣的是不能自動(dòng)換行的,結(jié)果就是:
換行符會(huì)原樣輸出。
如果要使換行符生效,需要加一個(gè)e參數(shù):
echo -e "1 3 5 " > test2.txt
結(jié)果:
所以,echo 是可以將多行文本輸出到文件的。不過這里要寫入很多換行符。
如果不想這么麻煩,可以使用cat命令。Shell中echo輸出帶有顏色的日志的實(shí)現(xiàn)方法
cat << EOF >>test3.txt
11111
22222
33333
EOF
EOF設(shè)置為結(jié)尾符,然后第一行設(shè)置為:cat << EOF >> 文件名
隨后的幾行就是文件內(nèi)容輸入?yún)^(qū),前面的空格也會(huì)計(jì)算在內(nèi)。
當(dāng)輸入EOF再回車的話,就結(jié)束輸入了。
其實(shí),輸入什么內(nèi)容結(jié)束輸入,是第一行設(shè)置的EOF決定的。你可以把EOF改為其他的字符串或者一個(gè)字符,只要你輸入的內(nèi)容里不會(huì)出現(xiàn)即可。因?yàn)槌霈F(xiàn)了就會(huì)識(shí)別為結(jié)束,后續(xù)的內(nèi)容不會(huì)再被輸出到文件里。Linux 服務(wù)器監(jiān)控性能和資源
結(jié)果:
這樣的輸入輸出是非常符合人類習(xí)慣的,不用再寫換行符了。
總結(jié)
本文列出來兩種將多行文本輸出到文件的方法,echo和cat都可以實(shí)現(xiàn)哦。
