当前位置: 首页 > news >正文

Linux写sh开机启动脚本-bash报错的两种克服方法

最近写了个Linux开机自启动Java程序的脚本,后面更新版本时需要停止觉得太麻烦,于是又写了个stop脚本,结果运行的时候报错:Permission denied

[root@]# ./stop.sh
-bash: ./stop.sh: Permission denied

这里是权限不够的错误,所以我们执行一下这个命令就可以了

chmod +x stop.sh

紧接着再运行,又出现了一个错误。

[root@]# ./stop.sh
-bash: ./stop.sh: 无法执行:找不到需要的文件

这个错误其实我在写start的时候就遇到了,只是脑子不好用了,才过了几天就忘了这回事而已。

根据找到资料的原因,是因为在windows环境下写的sh脚本格式在linux环境下不支持。

解决办法1

第1个解决方法,是我当时写start.sh的时候使用的,我们主要是使用vim编辑。

vim start.sh

我们不用按i进入编辑,直接在这个模式按冒号,输入以下:

set ff=unix

Esc + :set ff=unix

最后再使用wq保存退出,再次运行就成功了。

解决办法2

以下是本次编辑stop.sh的时候用到的第2种办法。

报错-bash: ./stop.sh: /bin/bash^M: bad interpreter: No such file or directory

作者提到,这个错误通常出现在 Windows 换行符(CRLF)与 Linux/Unix 换行符(LF)之间的不匹配导致的。在 Unix/Linux 系统中,换行符只是 LF(\n),而在 Windows 中,换行符是 CRLF(\r\n)。

解决方法之一是使用 dos2unix 命令将脚本文件的换行符转换为 Unix 格式。你可以在终端中运行以下命令:

dos2unix stop.sh

如果没办法安装的话,你可以尝试使用 sed 命令来替换文件中的换行符

sed -i 's/\r$//' stop.sh

那么最后我说执行了dos2unix 这里命令,stop.sh就可以正常执行了,感觉要比第1种方法快捷一点。

jar包自启动脚本

start.sh

既然都专门写一篇博客了,就顺便把两个脚本一起放上来,也是方便日后学习回顾。

#!/bin/bash
JAR_PATH=/usr/projectName/java-1.0-SNAPSHOT-exec.jar
echo "Checking $JAR_PATH..."
if [ ! -f "$JAR_PATH" ]; thenecho "Error: $JAR_PATH does not exist."echo "Listing directory contents:"ls -l $(dirname "$JAR_PATH")exit 1
fi
# 检查jar文件是否存在
if [ ! -f "$JAR_PATH" ]; thenecho "Error: $JAR_PATH does not exist."exit 1
fi
# 检查是否有读取权限
if [ ! -r "$JAR_PATH" ]; thenecho "Error: No read permission for $JAR_PATH."exit 1
fi
# 如果一切正常,运行jar文件
nohup java -jar $JAR_PATH > /usr/projectName/app.log 2>&1 &

stop.sh

server_name=QuoteServer
echo ******stop $server_name begin******
#find the pid of server_name
str=$(ps -ef|grep $server_name|grep -v "grep"|awk '{printf$2}')
kill -9 $str
if [ "$?" -eq 0 ];thenecho kill $server_name Success,pid=$str
elseecho kill $server_name Failed,pid="$str
fi
echo ******stop $server_name end******

自启动配置

首先,编辑配置文件

vim /etc/profile

在配置文件最后,加入start.sh的路径,再保存退出

sh /usr/projectName/start.sh

最后,执行以下以下命令,就能立马生效了。

source /etc/profile

参考链接:

https://blog.csdn.net/qq_28822933/article/details/102934915

https://blog.csdn.net/weixin_44928129/article/details/138698737

https://blog.csdn.net/tg928600774/article/details/153690825

http://www.jsqmd.com/news/299154/

相关文章:

  • VTK 类结构图
  • 基于Spring Boot的长春美食推荐管理系统的设计与实现(源码+论文+部署+安装)
  • 1-1 Java开发环境搭建
  • 本章节我们将讨论如何在 React 中使用表单DFS。
  • 看一遍就懂-大模型架构及encoder-decoder详细训练和推理计算过程
  • 完整教程:Android内核进阶之获取DMA地址snd_pcm_sgbuf_get_addr:用法实例(九十一)
  • CAD二次开发中关于非模态对话框的使用
  • 机器学习——线性回归、代价(损失)函数、L1L2正则化、梯度下降算法、正态分布和标准正态分布
  • 微积分:世界是用“微分”写成的,我们是用“积分”读懂的
  • 宝塔面板一键部署 Emlog 教程:从服务器准备到站点上线全攻略
  • 爬虫项目:利用 Playwright 和 Asyncio 高效收集酒店信息
  • 华为MetaERP锂电池行业数字化转型总体蓝图架构设计解决方案
  • 将“100小时精通Oracle ERP,华为MetaERP和SAP”称为“不得不把握的世纪机会”
  • 华为MetaERP作为华为自主研发的新一代企业资源计划系统,其成功部署和高效运行依赖于多个核心技术组件和生态合作伙伴的协同支持
  • 232. 用栈实现队列
  • 吐血推荐8个AI论文工具,本科生搞定毕业论文!
  • SAP ERP的成本中心与Oracle ERP会计科目弹性域中部门段的比较
  • 在SAP系统中,利润中心(Profit Center)和成本中心(Cost Center)是两个关键的组织单元,用于企业内部管理和财务控制
  • 在SAP ERP中,控制范围(Controlling Area)是管理会计(CO模块)的核心组织单元,用于成本核算、成本中心会计、利润中心会计等
  • 华为MetaERP作为华为自主研发的企业资源规划系统,深度融合了实时智能技术,以提升企业运营效率和决策智能化水平
  • 8.开发工具
  • X光检测技术如何保障生产线上的产品安全与质量
  • 主流门店管理软件如何选?客观对比为商家提供参考
  • gops 工具在 Cilium 中的应用指南
  • 刘洋洋《爱在照亮》温暖上线 解锁平凡日常里的爱的模样
  • qt之QTableView设置模型代理代码示例
  • 【数据集】【YOLO】【目标检测】口罩材料集,口罩佩戴识别材料集 1971 张,YOLO佩戴口罩检测算法实战训练教程。
  • intel白皮书卷2 第二章(AI翻译)
  • intel白皮书卷2 附录A(AI翻译)
  • https 证书 生成安装笔记