本篇将通过Shell 脚本实现自动启动Java程序、日志管理和定时任务监控。脚本启动程序具灵活定制、可移植性和扩展性强的优点,可以根据需要添加额外的功能、配置选项和自定义行为,从而满足更具体的要求。
vim start_program.sh
#!/bin/bash
cd /path/to/youdir
# 设置Java程序的名称
JAVA_PROGRAM="java -jar test.jar"
# 设置日志输出路径
LOG_DIR="/path/to/log"
# 设置日志文件的前缀
LOG_PREFIX="program_log"
# 设置日志文件的最大大小(200M)
MAX_LOG_SIZE=200000000
# 设置最多保留的日志文件个数
MAX_LOG_FILES=7
# 设置定时任务检查的端口
CHECK_PORT=your_program_port
# 创建日志目录
mkdir -p "$LOG_DIR"
# 在日志轮转之前创建一个空白的日志文件
touch "$LOG_DIR/$LOG_PREFIX.log"
# 定义日志轮转函数
rotate_logs() {
# 检查日志文件数量是否超过最大保留个数
if [ $(ls -1 "$LOG_DIR/$LOG_PREFIX"* | wc -l) -gt $MAX_LOG_FILES ]; then
# 删除最旧的日志文件
rm -f "$(ls -1t "$LOG_DIR/$LOG_PREFIX"* | tail -n 1)"
fi
# 检查当前日志文件大小是否超过最大大小
if [ $(wc -c <"$LOG_DIR/$LOG_PREFIX.log") -gt $MAX_LOG_SIZE ]; then
# 轮转日志文件
mv "$LOG_DIR/$LOG_PREFIX.log" "$LOG_DIR/$LOG_PREFIX-$(date +'%Y%m%d%H%M%S').log"
touch "$LOG_DIR/$LOG_PREFIX.log"
fi
}
# 定义检查程序运行状态函数
check_program_status() {
# 检查程序是否在运行
netstat -an | grep "$CHECK_PORT" > /dev/null
if [ $? -ne 0 ]; then
# 如果程序不在运行,则重新启动
echo "程序未运行,重新启动中..."
nohup $JAVA_PROGRAM >> "$LOG_DIR/$LOG_PREFIX.log" 2>&1 &
else
echo "程序正在运行..."
fi
}
# 调用日志轮转函数
rotate_logs
# 调用检查程序运行状态函数
check_program_status
确保将脚本中的/path/to/log和your_program_port等替换为实际的日志路径和程序监听的端口。然后,赋予脚本执行权限:
chmod +x start_program.sh
最后,将脚本添加到定时任务中。您可以使用crontab -e命令编辑定时任务表,例如:
*/5 * * * * /path/to/start_program.sh
程序运行示例:
Java程序最好是运行在一个低权限的用户中,以保证系统不会因为Java程序出错而受到影响。
Shebang 行:
#!/bin/bash
这一行指定了用于运行脚本的解释器,这里是 Bash。
Java 程序和日志设置:
JAVA_PROGRAM="java -jar test.jar"
LOG_DIR="/path/to/log"
LOG_PREFIX="program_log"
MAX_LOG_SIZE=200000000
MAX_LOG_FILES=7
CHECK_PORT=your_program_port
这些行定义了 Java 程序的命令、日志目录、日志文件前缀、最大日志大小、最大保留的日志文件数以及用于检查程序运行状态的端口。
创建日志目录:
mkdir -p "$LOG_DIR"
这一行创建日志目录,-p选项确保如果目录不存在,也会创建。
启动 Java 程序:
nohup $JAVA_PROGRAM >> "$LOG_DIR/$LOG_PREFIX.log" 2>&1 &
这一行使用 nohup 启动 Java 程序,并将输出追加到指定路径的日志文件中。2>&1将标准错误流(stderr)也重定向到标准输出流(stdout),&使得该命令在后台运行。
定义日志轮转函数:
rotate_logs() {
# ...
}
这一部分定义了一个函数 rotate_logs,用于实现日志轮转的逻辑。
检查程序运行状态函数:
check_program_status() {
# ...
}
这一部分定义了一个函数 check_program_status,用于检查程序运行状态的逻辑。
调用日志轮转函数:
rotate_logs
这一行调用了之前定义的 rotate_logs 函数,执行日志轮转逻辑。
调用检查程序运行状态函数:
调用检查程序运行状态函数:
这一行调用了之前定义的 check_program_status 函数,执行检查程序运行状态的逻辑。
最后,确保将脚本中的/path/to/log和your_program_port等替换为实际的日志路径和程序监听的端口。赋予脚本执行权限,并将脚本添加到定时任务中。
######################################################################################################################
小说:《仙狐》
推荐理由:创意A,开篇A,文笔也不错,太平天兵这个概念还是蛮不错的。