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/