1. 需求
用戶要求將 Tomcat 的日志文件定時備份到另一臺服務器。同事給我提供了一個寫好的 java 框架,但實在不想給用戶再維護另一個服務了,所以另尋他法。
2. 問題
使用 scp 等跨服務器傳輸命令時需要手動輸入用戶名的密碼才可進行文件傳輸,定時任務會卡在這個節點上。
3. 解決方案
- 使用 crond 服務設置定時任務。
- 使用 sshpass 跳過手動輸入密碼過程。
- 使用 scp 命令傳輸文件。
3.1 crond 服務
3.1.1 cron 表達式
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
3.1.2 crond 服務涉及命令
# 編輯當前用戶的cron表達式文件
crontab -e
# 啟動服務
/sbin/service crond start
# 關閉服務
/sbin/service crond stop
# 重啟服務
/sbin/service crond restart
# 重新載入配置
/sbin/service crond reload
# 查看服務狀態
service crond status
3.2 sshpass + scp
# 工具安裝
yum install sshpass -y
# 命令格式
# -p password 提供密碼作為參數(安全性不明智)
sshpass -p password scp source_directory username@destination_ip:destination_directory
# 示例
sshpass -p 123456 scp /root/test.txt root@192.168.21.1:/root/
4. 參考資料
[1] 幾種方法來實現scp拷貝時無需輸入密碼