linux 服务脚本
#!/bin/bash
#
# chkconfig:
# description: my_SERVICE_NAME is a my Service
# # common function
. /etc/init.d/functions # service bash flag
IVMS_SERVICE= CORE_DUMP_DIR=/var/my_core
DAEMON_COREFILE_LIMIT=unlimited
SVC_SYS_DIR=/etc/init.d SVC_PROG=my_SERVICE_PROG
SVC_NAME=my_SERVICE_NAME
SVC_DIR=my_SERVICE_DIR
SVC_LOCK_FILE=/var/lock/subsys/$SVC_PROG
SVC_PID_FILE=/var/run/$SVC_NAME.pid # install service, $ service name, $ executable name
InstallSvc()
{
if [ -z "$1" ]; then
echo $"service name is needed by myservice."
return -
fi SVC_NAME=$
SVC_PROG=${:-$SVC_NAME}
SVC_DIR=`pwd`
SVC_SYS_FILE=$SVC_SYS_DIR/$SVC_NAME if [ ! -f $SVC_DIR/$SVC_PROG ]; then
echo $"$SVC_DIR/$SVC_PROG does not exist."
return -
fi echo $"installing $SVC_NAME service, executable file $SVC_DIR/$SVC_PROG ..." # set suid_dumpable on
if [ -e /proc/sys/kernel/suid_dumpable ]; then
echo > /proc/sys/kernel/suid_dumpable
else
echo > /proc/sys/fs/suid_dumpable
fi # create core directory
if [ -d $CORE_DUMP_DIR ]; then
echo $"$CORE_DUMP_DIR/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
else
mkdir $CORE_DUMP_DIR
echo $"$CORE_DUMP_DIR/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
fi # config sysctl to enable core
grep "$CORE_DUMP_DIR/core-%e-%p-%t" /etc/sysctl.conf
if [ $? -ne ]; then
echo $"fs.suid_dumpable = 1" >> /etc/sysctl.conf
echo $"kernel.core_pattern = $CORE_DUMP_DIR/core-%e-%p-%t" >> /etc/sysctl.conf
fi # create service bash
sed -e "s%my_SERVICE=0%my_SERVICE=1%g" $ | \
sed -e "s%my_SERVICE_PROG%$SVC_PROG%g" | \
sed -e "s%my_SERVICE_NAME%$SVC_NAME%g" | \
sed -e "s%my_SERVICE_DIR%$SVC_DIR%g" > $SVC_SYS_FILE chmod u+x $SVC_SYS_FILE
chmod u+x $SVC_DIR/$SVC_PROG
chkconfig --add $SVC_NAME echo $"install $SVC_NAME service successfully."
return
} # uninstall service, $ service name
UninstallSvc()
{
if [ -z "$1" ]; then
echo $"service name is needed by myservice."
return -
fi SVC_NAME=$
SVC_SYS_FILE=$SVC_SYS_DIR/$SVC_NAME echo $"uninstalling $SVC_NAME service ..." # rm service bash
if [ -f $SVC_SYS_FILE ]; then
chkconfig --del $SVC_NAME
rm -f $SVC_SYS_FILE
else
warning $"$SVC_NAME service does not exist."
fi echo $"uninstall $SVC_NAME service successfully."
return
} # start service
StartSvc()
{
echo $"starting $SVC_NAME service ..." # set core unlimited, replaced by DAEMON_COREFILE_LIMIT
#ulimit -c unlimited # create lockfile, run program
touch $SVC_LOCK_FILE
cd $SVC_DIR
daemon --pidfile=$SVC_PID_FILE $SVC_DIR/$SVC_PROG -service
if [ $? -eq ]; then
# created by the program
#pidof $SVC_DIR/$SVC_PROG > $SVC_PID_FILE
echo $"start $SVC_NAME service successfully."
return
else
echo $"start $SVC_NAME service failure."
return -
fi
} # get service status
IsSvcRunning()
{
local pid
__pids_var_run $SVC_NAME $SVC_PID_FILE
[ -n "$pid" ] && return || return
} # stop service
StopSvc()
{
echo $"stopping $SVC_NAME service ..." # remove lockfile
rm -f $SVC_LOCK_FILE # wait for exit
local i RC
for (( i = ; i < ; i++ )); do
if IsSvcRunning; then
sleep
else
break
fi
done if [ $i -eq ] && IsSvcRunning; then
killproc -p $SVC_PID_FILE $SVC_NAME
RC=$?
else
rm -f $SVC_PID_FILE
RC=
fi if [ $RC -eq ]; then
echo $"stop $SVC_NAME service successfully."
return
else
echo $"stop $SVC_NAME service failure."
return -
fi
} # restart service
RestartSvc()
{
echo $"restarting $SVC_NAME service ..." StopSvc
if [ $? -eq ]; then
StartSvc
if [ $? -eq ]; then
echo $"restart $SVC_NAME service successfully."
return
fi
fi echo $"restart $SVC_NAME service failure."
return -
} RETVAL= if [ $IVMS_SERVICE -eq ]; then
# setup
case $ in
install | i)
InstallSvc $ $
RETVAL=$?
;;
uninstall | u)
UninstallSvc $
RETVAL=$?
;;
*)
echo $"Usage: $0 {i, install NAME [EXEC] | u, uninstall NAME}"
;;
esac
else
# service
case $ in
start | r)
StartSvc
RETVAL=$?
;;
stop | p)
StopSvc
RETVAL=$?
;;
restart | e)
RestartSvc
RETVAL=$?
;;
status | s)
status -p $SVC_PID_FILE $SVC_NAME
RETVAL=$?
;;
status2)
IsSvcRunning && echo $"$SVC_NAME service is running." || echo $"$SVC_NAME service has been stopped."
;;
*)
echo $$"Usage: $0 {start|stop|status|restart}"
;;
esac
fi exit $RETVAL
linux 服务脚本的更多相关文章
- linux服务脚本编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- linux服务脚本
#!/bin/sh ARG=$1 case $ARG in start): nohup /path/program & ;; stop): pkill program ;; restart): ...
- 第11章 Linux服务管理
1. 服务分类 (1)Linux的服务 ①Linux中绝大多数的服务都是独立的,直接运行于内存中.当用户访问时,该服务直接响应用户,其好处是服务访问响应速度快.但不利之处是系统中服务越多,消耗的资源越 ...
- 在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service
在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service 1.在 /etc/rc.d/init.d/ 目录下创建一个名字和服务名完全相同的 shell 脚本文件 joyup ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- Linux学习笔记(19) Linux服务管理
1. 服务的分类 Linux服务可分为RPM包默认安装的服务和源码包安装的服务.前者可细分为独立的服务(直接作用于内存中)和基于xinetd服务.xinetd本身是独立的服务,其唯一的功能是管理其他服 ...
- [Linux]服务管理:rpm包, 源码包
--------------------------------------------------------------------------------------------------- ...
- linux服务开机启动顺序
今天遇到了一个问题,我们写了一个服务脚本A,该服务需要优先于mysql启动.脚本是从其他地方拷来的模板,前面的默认配置没改,只是实现了自己的功能.写完,chkconfig A on,reboot,启动 ...
随机推荐
- 利用Redis Sentinel实现redis主从自动切换
redis主从配置很简单,只需要在slave的配置里加slaveof 192.168.0.100 6379(master的ip和端口) 如果master有密码再设置 masterauth passwo ...
- sql server 变量 字符串拼接
参考:SQL server中null+字符串,isnull以及把查询结果赋给一个字符变量组成另一个查询语句 1.开始定义的字符串都为null.例如:declare @sql,那么@sql就是null ...
- 整体二分例题:POI2011Meteors——Chemist
题目地址:https://www.luogu.org/problemnew/show/P3527#sub 首先这个答案不是操作几次下了几场陨石雨之后的陨石个数,无法在线做,考虑离线做法.暴力的想法就是 ...
- TRACE Method 网站漏洞,你关闭了吗[转]
危险:该漏洞可能篡改网页HTML 源码 最近采用360 web scan 对服务器进行扫描.发现漏洞.TRACE Method Enabled 安全打分98分.前一阵有网页JS被人篡改,可能就是从这个 ...
- [Usaco2011 Feb]Generic Cow Protests
Description Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. ...
- Hdu 5379 Mahjong tree (dfs + 组合数)
题目链接: Hdu 5379 Mahjong tree 题目描述: 给出一个有n个节点的树,以节点1为根节点.问在满足兄弟节点连续 以及 子树包含节点连续 的条件下,有多少种编号方案给树上的n个点编号 ...
- 最短路(Dijkstra) HDOJ 4318 Power transmission
题目传送门 题意:起点s到终点t送电,中途会有损耗,问最小损耗是多少 分析:可以转换为单源最短路问题,用优先队列的Dijkstra版本,d[]表示从s出发到当前点的最小损耗,用res保存剩下的电量.当 ...
- AJPFX总结Socket的低层次Java网络编程
Socket的低层次Java网络编程 1 Socket通讯 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接. ...
- js对象数组深度去重和深度排序
使用collect.js处理数组和对象 https://github.com/ecrmnn/collect.js/# 引入collect.js https://github.com/ecrmnn/co ...
- Android学习笔记(八) CheckBox和RadioGroup
一.CheckBox 1.CheckBox的常用方法: boolean isChecked() :返回当前CheckBox的选中状态 void setChecked(boolean isChecked ...