在CentOS系统中,编写进程启动脚本需要遵循一定的规范和技巧,以确保脚本的可读性、可维护性和可靠性。以下是一些编写CentOS进程启动脚本的技巧:
脚本开头使用#!/bin/bash,指定脚本使用的解释器。
为脚本添加注释,说明脚本的功能、作者、创建日期等信息。
使用set -e命令,使脚本在遇到错误时立即退出,避免因为错误导致的进程异常。
使用trap命令捕获脚本中的信号,如SIGINT、SIGTERM等,以便在脚本退出时执行一些清理操作。
在脚本中定义变量,如进程名称、进程路径、日志文件路径等,以提高脚本的可读性和可维护性。
使用start、stop、restart等函数定义进程的启动、停止和重启操作。
在启动函数中,检查进程是否已经在运行,如果已经在运行则退出,避免重复启动。
在停止函数中,检查进程是否存在,如果存在则停止进程。
在重启函数中,先调用停止函数停止进程,然后调用启动函数启动进程。
使用systemctl命令将脚本注册为系统服务,以便通过systemctl start/stop/restart命令控制进程。
以下是一个简单的示例脚本:
#!/bin/bash
# process.sh
# Description: A simple process start/stop/restart script
set -e
trap 'echo "Exiting..."; exit 1' SIGINT SIGTERM
process_name="my_process"
process_path="/path/to/my_process"
log_file="/var/log/my_process.log"
start() {
if pgrep -x "$process_name" > /dev/null; then
echo "$process_name is already running."
else
echo "Starting $process_name..."
nohup $process_path >> $log_file 2>&1 &
fi
}
stop() {
if pgrep -x "$process_name" > /dev/null; then
echo "Stopping $process_name..."
pkill -x "$process_name"
else
echo "$process_name is not running."
fi
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
将此脚本保存为/usr/local/bin/process.sh,并使用以下命令将其注册为系统服务:
#!/bin/systemctl
[Unit]
Description=My Process Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/process.sh start
ExecStop=/usr/local/bin/process.sh stop
ExecReload=/usr/local/bin/process.sh restart
Restart=on-failure
[Install]
WantedBy=multi-user.target
将此文件保存为/etc/systemd/system/my_process.service,然后运行以下命令启用和启动服务:
systemctl enable my_process.service
systemctl start my_process.service
现在,您可以使用systemctl start/stop/restart my_process.service命令控制进程。