企业网站建设包含哪些内容,建设网站是主营成本吗,沈阳网站优化哪家好,大气宽屏企业网站源码需求描述#xff1a;
设计一个脚本#xff0c;通过Linux定时任务#xff0c;每分钟执行一次#xff0c;监控jar包进程是否存在#xff0c;存在则不做动作#xff0c;不存在则重新拉起jar包程序。
定时任务配置#xff1a;
*/1 * * * * bash -x /root/myfile/jars/che…需求描述
设计一个脚本通过Linux定时任务每分钟执行一次监控jar包进程是否存在存在则不做动作不存在则重新拉起jar包程序。
定时任务配置
*/1 * * * * bash -x /root/myfile/jars/check_status_job.sh脚本内容
#!/bin/env bash#重新加载环境变量解决java命令不存在的问题。
. /etc/profilevalspringboot-8053.jar;idsps -ef | grep $val | grep -v grep | awk {print $2};
echo $ids;if [[ -z $ids ]];thenecho 进程不存在已被重新拉起;nohup java -jar -Xmx256m -Xms256m /root/myfile/jars/$val /root/myfile/jars/default.out 21 nohup java -jar -Xmx256m -Xms256m /root/myfile/jarsxxxx/$val /root/myfile/jarsxxxx/default.out 21
elseecho 进程存在无须拉起;
fi通过以上配置就可以实现需求。
遇到的问题及排查过程
1、java命令不存在问题 排查
首先确认自己是root账号配置的cron并且执行了命令检查java是否存在 发现是存在的java环境变量也是配置了的。 郁闷了那为什么cron会无法识别到了 于是请教了大佬排查过程如下 首先这个问题的本质是cron执行shell脚本时环境变量没加载cron会清空环境。 通过一下命令排查
cat ~/.bashrc
cat ~/.bash_profile
which java
grep -r jdk /etc/profile*以上命令执行结果截图 从而确定是cron没有读取到自己配置的java环境变量。 于是在脚本最开始加载一下环境变量解决该问题。
#重新加载配置的环境变量
. /etc/profile2、程序日志输出到default的问题。
输出到日志的方法有很多种大致思路就是nohup重定向到default文件。 类似命令
nohup java -jar -Xmx256m -Xms256m /root/myfile/jars/springboot.jar default.out 21 但是我的cron命令是
bash -x /root/myfile/jars/check_status_job.sh这样可以看到shell脚本的运行步骤方便排查脚本问题。 于是日志输出如下 你会发现 重定向后的部分没有构建到命令里。 这让初学者的我傻眼了我以为日志打印的命令没构建全那么default肯定没法生成。 然后去脚本目录/root/myfile/jars/查看default.out文件也确实没创建。 于是我错误的认为命令构建出错导致default.out没能生成。
排查
召唤大佬
1、default 默认生成在 /root 下
2、ls ~root 查看该目录下的文件有哪些
3、想要指定目录就加绝对路径发现确实生成了default.out日志文件。 于是重新构建我的nohup启动命令
nohup java -jar -Xmx256m -Xms256m /root/myfile/jars/$val /root/myfile/jarsxxxx/default.out 21 这样就可以在我指定的目录中生成日志文件了。 另外这里是覆盖重定向这样每次重启后default.out都是重新覆盖。从而保证日志不会无限扩大。并且shell脚本的日志不会输出到default.out中。
补充
另外一种日志输出的方法是通过cron配置把脚本日志全部输出到default.out里面 命令如下
*/1 * * * * bash -x /root/myfile/jars/check_status_job.sh /root/myfile/jars/default.out 这个办法不太好会把shell脚本的日志和jar程序的日志都输出到default.out中另外这里只能用追加重定向会导致日志文件无限扩大不方便排查。