./脚本名.sh
,2. 终止后重启:先Ctrl+C
结束当前进程,再重新执行,3. 后台作业:用fg
调出暂停的脚本,或kill %作业号
终止后重启,4. 定时任务:通过cron设置定时自动执行,5. 监控工具:使用systemd或supervisor实现崩溃自动重启基础方法:直接重新执行脚本
赋予执行权限(首次运行前)
若脚本无执行权限,需先授权:
chmod +x your_script.sh # 添加可执行权限
重新运行的两种方式
- 绝对路径/相对路径执行:
./your_script.sh # 相对路径(当前目录) /home/user/your_script.sh # 绝对路径
- 通过解释器调用(无需权限):
bash your_script.sh # 使用Bash解释器 python3 your_script.py # Python脚本示例
进阶场景与解决方案
脚本在后台运行时的重启
步骤:
- 查找进程ID并终止:
pgrep -f "your_script.sh" # 查询进程ID kill [进程ID] # 结束原进程
- 重新启动:
nohup ./your_script.sh & # 后台运行(忽略挂断信号)
自动监控重启(崩溃后自动恢复)
-
使用
while
循环(简单场景):while true; do ./your_script.sh sleep 10 # 等待10秒后重启 done
-
通过
systemd
服务(生产环境推荐):
创建服务文件/etc/systemd/system/your_script.service
:[Unit] Description=Auto-restart Script Service [Service] ExecStart=/path/to/your_script.sh Restart=always # 任何原因退出都重启 RestartSec=5 # 间隔5秒 [Install] WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload sudo systemctl start your_script.service
开发调试时的快速重启
- 结合
watch
命令(文件修改后自动运行):watch -n 2 ./your_script.sh # 每2秒执行一次
- 使用
entr
工具(依赖文件变化触发):echo your_script.sh | entr -r ./your_script.sh
关键注意事项
-
权限问题:
- 确保用户对脚本和依赖文件有读/执行权限(用
ls -l
检查)。 - 系统服务需以
sudo
或专用用户运行。
- 确保用户对脚本和依赖文件有读/执行权限(用
-
环境一致性:
- 后台运行时继承当前Shell环境变量,可通过脚本内显式设置:
#!/bin/bash export PATH=/custom/bin:$PATH # 自定义环境变量
- 后台运行时继承当前Shell环境变量,可通过脚本内显式设置:
-
避免资源冲突:
- 重启前确认原进程已终止(
ps aux | grep your_script
)。 - 对文件读写或端口绑定的脚本,确保旧进程释放资源。
- 重启前确认原进程已终止(
-
日志记录:
- 重定向输出便于排查问题:
./your_script.sh >> /var/log/script.log 2>&1
- 重定向输出便于排查问题:
总结建议
- 简单场景:直接命令行重新执行(
bash script.sh
)。 - 后台服务:用
systemd
或supervisor
实现自动重启。 - 开发调试:结合
watch
/entr
实时监控文件变化。 - 生产环境:务必添加日志和错误处理(如
set -e
)。
引用说明:
本文方法基于Linux标准操作规范,参考了GNU Bash手册、Systemd官方文档及Stack Exchange社区最佳实践,确保操作前备份数据,关键任务建议在测试环境验证。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/36103.html