编写shell脚本 文件名字起 start.sh
#!/bin/bash
#定义变量server的名字
server_name="ccn.paas.service"
#服务启用时的运行参数
server_path="nohup java -jar -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:./:./lib:./plugins ccn.paas.service.jar > /dev/null 10240 &"
#启动方法
start(){
#输出 --start-
echo "--start-"
# $server_path 引用刚才定义的服务启动的运行参数
($server_path) &
#查出启动的进程pid 赋值给pid
pid=$(ps -ef|grep $server_name |grep -v grep |awk '{print $2}')
#判断pid是都有值,就是判断服务是否启动
if [ ! $pid ]; then
#如果服务没有启动 输出 service is not exit ...
echo "service is not exit ..."
else
#否则输出pid的值 如pid=12345
echo "pid=$pid"
#关闭if判断
fi
}
stop(){
pid=$(ps -ef|grep $server_name |grep -v grep |awk '{print $2}')
if [ ! $pid ]; then
echo "service is not exit ..."
else
kill -9 $pid
fi
}
restart(){
pid=$(ps -ef|grep $server_name |grep -v grep |awk '{print $2}')
if [ ! $pid ]; then
echo "service is not exit ..."
start
else
kill -9 $pid
start
fi
}
checkrun(){
while true
do
pid=$(ps -ef|grep $server_name |grep -v grep |awk '{print $2}')
if [[ $pid -eq 0 ]]; then
echo "--restart-"
start
fi
sleep 30s
done
}
#或输入参数1 比如 启动文件 ./start.sh start stop restart
#$1 的值就是传递的值 start
#$2 的值就是传递的值 stop
#$3 的值就是传递的值 restart
#判断 传入值是什么就比较执行什么方法
case $1 in
#当传入参数是 start 就执行start方法
start):
start
;;
stop):
echo "--stop"
stop
;;
restart):
echo "--restart"
restart
;;
checkrun):
echo "--restart"
checkrun
;;
*):
echo "error ..."
;;
esac
exit 0
复制代码
重启执行
./start.sh start
停止执行
./start.sh stop
重启执行
./start restart
复制代码
我们在Windows上面编写shell文件后上传linux服务器上后执行会报错
报错1:
#执行
[root@10-20-31-41 paas2]# ./start.sh
#报错没有权限
-bash: ./start.sh: Permission denied
#执行命令富裕权限
[root@10-20-31-41 paas2]# chmod a+x start.sh
复制代码
报错2:
[root@10-20-31-41 paas2]# ./start.sh restart
-bash: ./start.sh: /bin/bash^M: bad interpreter: No such file or directory
复制代码
- 在Windows上面编写shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。查看脚本文件是dos格式还是unix格式的几种办法。
1. cat -A start.sh 从显示结果可以判断,dos格式的文件行尾为^M$,unix格式的文件行尾为$
2. od -t x1 start.sh 如果看到输出内容中存在0d 0a的字符,那么文件是dos格式,如果只有0a,则是unix格式
3. vi start.sh 打开文件,执行 : set ff,如果文件为dos格式在显示为fileformat=dos,如果是unxi则显示为fileformat=unix
复制代码
解决方法1:
[root@localhost bin]# dos2unix start.sh
dos2unix: converting file start.sh to UNIX format ...
复制代码
解决方法2:
vim start.sh
:get fileformat #查看本文件的格式
:set fileformat=unix #设置文件为unix
:wq #保存
复制代码
解决方法3:
#使用sed命令,直接替换结尾符为unix格式
sed -i "s/\r//" start.sh
或者
sed -i "s/^M//" start..sh
复制代码
以上问题解决后就可以正常启动了
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END