Linux 复制程序包到其他服务器并重启应用脚本

文章介绍了如何通过SSH密钥对实现服务器之间的免密访问,以及编写脚本进行本地文件备份,自动复制到多台服务器并执行重启操作,包括Java应用的自动关闭和重启过程。

1、设置服务器访问其他服务器免密ssh

操作支持免密访问异地服务器

ssh-keygen -t rsa

默认enter按下去就可以,然后公钥传输到异地服务器,有多台需要复制的就复制到多台服务器,后续使用scp命令即可免密

cd ~
scp -p .ssh/id_rsa.pub root@192.168.0.26:/root/.ssh/authorized_keys

2、编写脚本进行本地备份,自动拷贝到其他服务器,并执行重启命令

#!/bin/bash
projectname=你的文件夹名称
#第一步开始备份
date=$(date +%Y-%m-%d)
echo '正在备份本地文件到文件夹'$projectname"_bak_"$date'预计23秒,请稍候...'
cp -rf /data/$projectname/ /data/$projectname"_bak_"$date

#第二步扩散复制到其他服务器,下面内容请自定义,每个软件需要拷贝的内容都不一样
echo '正在扩散程序包到 15 16 20 21 服务器'
scp -r /data/$projectname/config/* root@192.168.90.15:/data/$projectname/config/
scp -r /data/$projectname/config/* root@192.168.90.16:/data/$projectname/config/
scp -r /data/$projectname/config/* root@192.168.90.20:/data/$projectname/config/
scp -r /data/$projectname/config/* root@192.168.90.21:/data/$projectname/config/
scp -r /data/$projectname/a-app/a-app-v1.0.0.jar.original root@192.168.90.15:/data/$projectname/a-app/
scp -r /data/$projectname/a-app/a-app-v1.0.0.jar.original root@192.168.90.16:/data/$projectname/a-app/
scp -r /data/$projectname/a-app/a-app-v1.0.0.jar.original root@192.168.90.20:/data/$projectname/a-app/
scp -r /data/$projectname/a-app/a-app-v1.0.0.jar.original root@192.168.90.21:/data/$projectname/a-app/
scp -r /data/$projectname/a-app/lib/* root@192.168.90.15:/data/$projectname/a-app/lib/
scp -r /data/$projectname/a-app/lib/* root@192.168.90.16:/data/$projectname/a-app/lib/
scp -r /data/$projectname/a-app/lib/* root@192.168.90.20:/data/$projectname/a-app/lib/
scp -r /data/$projectname/a-app/lib/* root@192.168.90.21:/data/$projectname/a-app/lib/
#远程启动14服务器服务
echo '重启本地应用服务'
sh /data/$projectname/01startup-app.sh
#远程启动15服务器服务
echo 重启15服务器对应服务
ssh root@192.168.90.15 > /dev/null 2>&1 <<aabbcc
sh /data/$projectname/01startup-app.sh
sleep 3
exit
aabbcc
echo 15 service startup!
#远程启动16服务器服务
echo '重启16服务器对应服务'
ssh root@192.168.90.16 > /dev/null 2>&1 <<aabbcc
sh /data/$projectname/01startup-app.sh
sleep 3
exit
aabbcc
echo 16 service startup!
#远程启动20服务器服务
echo 重启20服务器对应服务
ssh root@192.168.90.20 > /dev/null 2>&1 <<aabbcc
sh /data/$projectname/01startup-app.sh
sleep 3
exit
aabbcc
echo 20 service startup!
#远程启动21服务器服务
echo 重启21服务器对应服务
ssh root@192.168.90.21 > /dev/null 2>&1 <<aabbcc
sh /data/$projectname/01startup-app.sh
sleep 3
exit
aabbcc
echo 21 service startup!

3、自动关闭现有java应用并重新启动的启动脚本

一般我们需要自己查找java应用进程 ps -ef|grep xxx kill-9 1111 来结束已经启动的java应用,然后重新启动java应用。下面这个脚本可以自己完成这个过程,只要启动脚本即可完成java应用的重启,配合上面的脚本才能做到多服务器批量自动更新java应用。

01startup-app.sh

#!/bin/bash
basepath=$(cd `dirname $0`; pwd)
arr=`ps -ef | grep a-app-v1.0.0 | grep -v grep | awk '{print $2}'`
echo get pid: ${arr}
for i in ${arr[@]};do
echo kill pid ${i}...
kill -9 ${i}
done;
echo kill finished!
cd ${basepath}
echo start application
nohup java -Xmx150M -Xms150M -jar -Dfile.encoding=UTF-8 -Dloader.path=${basepath}/a-app/lib,${basepath}/a-app/config  ${basepath}/a-app/a-app-v1.0.0.jar.original >/dev/null 2>&1 &
echo start end...

上面的内容a-app-v1.0.0 替换为自己的jar名称,java 启动命令自定义改进,包括目录结构,仅提供一个思路。

<think>好的,用户需要我帮忙写一个Linux服务器定时重启脚本。首先,我要确定用户的需求是什么。他们可能遇到服务器长时间运行导致性能下降,或者有内存泄漏等问题,需要通过定期重启来保持稳定性。不过,用户可能没有明确说明具体原因,所以需要我在回答中涵盖常见的使用场景。 接下来,我需要考虑如何编写这个脚本。定时任务通常使用crontab,但用户可能对crontab不熟悉,所以需要详细说明步骤。脚本本身应该简单有效,可能包括日志记录,这样用户可以确认重启是否成功。另外,权限问题也很重要,比如脚本是否需要sudo权限,或者如何配置crontab以root用户运行。 用户可能还会关心如何测试脚本,避免误操作导致服务器意外重启。所以应该在步骤中提醒用户先在测试环境运行,检查日志。此外,安全注意事项也很关键,比如确保脚本不会被未授权访问修改,或者避免过于频繁的重启影响服务可用性。 另外,用户可能需要不同的重启时间设置,比如每天、每周或每月,所以给出几个常见的crontab示例会很有帮助。同时,解释每个部分的作用,比如crontab的时间字段,让用户能够自行调整。 还要考虑是否要包括关闭特定服务或进行备份的步骤,但用户当前的需求可能比较简单,所以保持基础脚本,再提供扩展建议会更合适。比如在进阶部分提到添加通知机制或预处理步骤,供有需要的用户参考。 最后,确保语言清晰,步骤明确,用户即使没有太多Linux经验也能按照指导操作。检查脚本的正确性,比如使用shutdown命令的正确参数,以及日志记录的正确路径和权限。可能需要提醒用户根据实际环境修改日志路径,或者创建必要的目录结构。</think>以下是为您编写的Linux服务器定时重启脚本及详细部署指南,包含安全验证和日志追踪功能: --- ### **一、基础版定时重启脚本** ```bash #!/bin/bash # 文件名:auto_reboot.sh # 描述:安全重启脚本(带日志记录) LOG_FILE="/var/log/auto_reboot.log" # 记录重启操作 echo "[$(date '+%Y-%m-%d %H:%M:%S')] 系统重启程序启动" >> $LOG_FILE # 发送广播通知已登录用户 wall "警告:系统将在60秒后重启,请保存工作!" # 执行安全重启(允许取消) shutdown -r +1 "计划维护重启" >> $LOG_FILE 2>&1 # 检查执行状态 if [ $? -eq 0 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 重启指令已成功发送" >> $LOG_FILE else echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误:重启指令发送失败" >> $LOG_FILE exit 1 fi ``` --- ### **二、部署步骤** #### **1. 创建脚本文件** ```bash sudo nano /usr/local/bin/auto_reboot.sh # 创建脚本 sudo chmod +x /usr/local/bin/auto_reboot.sh # 添加执行权限 ``` #### **2. 配置日志轮转** ```bash sudo nano /etc/logrotate.d/auto_reboot # 创建日志管理配置 ``` 插入以下内容: ``` /var/log/auto_reboot.log { monthly missingok rotate 6 compress delaycompress notifempty create 0644 root root } ``` #### **3. 设置定时任务** ```bash sudo crontab -e # 编辑root用户的crontab ``` 添加以下行(示例为每周日凌晨3点重启): ``` # 定时重启任务(分 时 日 月 周) 0 3 * * 0 /usr/local/bin/auto_reboot.sh >/dev/null 2>&1 ``` --- ### **三、安全增强措施** #### **1. 重启前服务检查** 在`shutdown`命令前添加: ```bash # 检查关键服务状态 if ! systemctl is-active nginx >/dev/null 2>&1; then echo "[$(date)] 错误:Nginx服务异常,取消重启" >> $LOG_FILE exit 2 fi # 检查磁盘空间 DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%') if [ $DISK_USAGE -gt 90 ]; then echo "[$(date)] 错误:根分区使用率超过90%,取消重启" >> $LOG_FILE exit 3 fi ``` #### **2. 重启时间随机化(防止规律性攻击)** ```bash # 生成随机延迟(0-1800秒) RANDOM_DELAY=$(( RANDOM % 1800 )) shutdown -r +$((60 + RANDOM_DELAY)) # 原1分钟基础上增加随机延迟 ``` --- ### **四、操作验证流程** #### **1. 测试模式运行** ```bash sudo bash -x /usr/local/bin/auto_reboot.sh # 显示执行过程 # 查看日志验证 tail -f /var/log/auto_reboot.log ``` #### **2. 取消重启测试** ```bash shutdown -c # 检查取消功能是否有效 ``` --- ### **五、注意事项** 1. **服务依赖**:重启前需确认无持续运行的重要任务 2. **备份策略**:建议与重启任务配合执行数据备份 ```bash # 示例备份命令 tar -czf /backup/$(date +%Y%m%d).tar.gz /etc /var/www 2>>$LOG_FILE ``` 3. **监控对接**:建议配置Zabbix/Prometheus监控重启事件 --- ### **六、排错指南** | 现象 | 排查命令 | 解决方案 | |----------------------|-----------------------------|----------------------------| | 定时任务未执行 | `systemctl status cron` | 重启cron服务:`sudo systemctl restart cron` | | 权限不足 | `ls -l /usr/local/bin/auto_reboot.sh` | 设置权限:`sudo chown root:root /usr/local/bin/auto_reboot.sh` | | 日志文件无法写入 | `ls -ld /var/log/` | 创建日志文件:`sudo touch /var/log/auto_reboot.log` | 建议首次部署后,通过`at`命令测试短期定时任务: ```bash echo "/usr/local/bin/auto_reboot.sh" | at now + 5 minutes ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆的小青蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值