在CentOS系统中,编写一个进程启动脚本通常涉及以下几个步骤:
创建脚本文件:
使用文本编辑器(如vi, nano等)创建一个新的脚本文件。例如,创建一个名为my_service.sh的脚本。
sudo vi /etc/init.d/my_service.sh
编写脚本内容: 在脚本中添加必要的内容,包括启动、停止、重启和状态检查等功能。以下是一个简单的示例:
#!/bin/bash
# 设置脚本路径
SCRIPT_PATH=$(realpath "$0")
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
# 设置服务名称
SERVICE_NAME="my_service"
# 设置服务启动命令
START_CMD="/usr/bin/python /path/to/your/script.py"
# 设置日志文件路径
LOG_FILE="/var/log/${SERVICE_NAME}.log"
# 启动服务
start() {
if [ -f $SCRIPT_DIR/${SERVICE_NAME}.pid ]; then
echo "${SERVICE_NAME} is already running."
else
echo "Starting ${SERVICE_NAME}..."
nohup $START_CMD >> $LOG_FILE 2>&1 &
echo $! > $SCRIPT_DIR/${SERVICE_NAME}.pid
echo "${SERVICE_NAME} started."
fi
}
# 停止服务
stop() {
if [ -f $SCRIPT_DIR/${SERVICE_NAME}.pid ]; then
echo "Stopping ${SERVICE_NAME}..."
kill $(cat $SCRIPT_DIR/${SERVICE_NAME}.pid)
rm $SCRIPT_DIR/${SERVICE_NAME}.pid
echo "${SERVICE_NAME} stopped."
else
echo "${SERVICE_NAME} is not running."
fi
}
# 重启服务
restart() {
stop
start
}
# 检查服务状态
status() {
if [ -f $SCRIPT_DIR/${SERVICE_NAME}.pid ]; then
PID=$(cat $SCRIPT_DIR/${SERVICE_NAME}.pid)
if ps -p $PID > /dev/null; then
echo "${SERVICE_NAME} is running with PID $PID."
else
echo "${SERVICE_NAME} is not running but PID file exists."
fi
else
echo "${SERVICE_NAME} is not running."
fi
}
# 根据传入的参数执行相应的操作
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/${SERVICE_NAME} {start|stop|restart|status}"
exit 1
;;
esac
exit 0
设置脚本权限: 确保脚本具有可执行权限。
sudo chmod +x /etc/init.d/my_service.sh
注册服务:
使用chkconfig或systemctl将脚本注册为系统服务。
使用chkconfig:
sudo chkconfig --add my_service.sh
sudo chkconfig my_service.sh on
使用systemctl:
sudo systemctl daemon-reload
sudo systemctl enable my_service.sh
sudo systemctl start my_service.sh
测试服务: 启动、停止、重启和检查服务状态,确保脚本正常工作。
sudo service my_service.sh start
sudo service my_service.sh stop
sudo service my_service.sh restart
sudo service my_service.sh status
通过以上步骤,你可以在CentOS系统中编写并配置一个进程启动脚本。