在 Linux 上实现自动检测和启动 OpenOffice 的定时任务
in 默认分类 with 9 comments

在 Linux 上实现自动检测和启动 OpenOffice 的定时任务

in 默认分类 with 9 comments

前言

最近项目中用到的openoffice服务所部署的服务总是莫名的出现一些奇怪的现象 比如openoffice一直连接但是没有报错,正常运行中 openoffice服务的进程突然挂掉了。 这里记录下原因以及解决方案

原因

猜测自己粗心的原因,本地运行的其他项目调用的项目也是这个服务,导致同一时间访问的资源太多,连接池被占用等因素导致服务出现异常

解决方案

针对openoffice进程挂掉无法使用的问题。 1:考虑从代码层面添加重试机制或者多数据源切换 2:监听openoffice进程,并实现自动启动。 这里介绍第二个方案

基于linux Cron实现

#!/bin/bash
AppName=soffice
# 检查OpenOffice进程是否在运行
PID=`ps -ef |grep openoffice | grep $AppName |grep -v grep|awk '{print $2}'`

if [ x"$PID" != x"" ]; then
  echo "OpenOffice进程正在运行,不执行操作。"
else
  echo "OpenOffice进程未运行,执行启动操作。"
  # 启动OpenOffice命令
  nohup /opt/openoffice4/program/soffice.bin -headless -accept="socket,host=10.140.3.245,port=8100;urp;" -nofirststartwizard &
  sleep 5
fi

以下是对脚本的解释:

  1. AppName=soffice:设置变量 AppName 的值为 "soffice",用于后续的进程检查。
  2. PID=$(ps -ef | grep openoffice | grep $AppName | grep -v grep | awk '{print $2}'):使用 ps 命令结合管道和 grep 过滤器来获取包含 "openoffice" 和 "soffice" 的进程,并使用 awk 提取进程的 PID。这样可以检查 OpenOffice 进程是否在运行。
  3. if [ x"$PID" != x"" ]; then:使用条件语句判断变量 PID 是否为空。如果不为空,表示 OpenOffice 进程正在运行,输出相应的提示信息。
  4. echo "OpenOffice进程正在运行,不执行操作。":输出提示信息,表示 OpenOffice 进程正在运行,不需要执行启动操作。
  5. nohup /opt/openoffice4/program/soffice.bin -headless -accept="socket,host=10.140.3.245,port=8100;urp;" -nofirststartwizard &:启动 OpenOffice 的命令。nohup 命令用于在后台运行进程,并将输出重定向到文件 nohup.out。-headless 参数表示以无界面模式启动,-accept 参数指定 OpenOffice 接受连接的方式(通过 socket 连接到指定的主机和端口),-nofirststartwizard 参数表示不显示首次启动向导。
  6. sleep 5:暂停脚本执行 5 秒,等待 OpenOffice 进程启动完成。

注意脚本要添加可执行权限

以下是对 cron 表达式的解释

因此,这个 cron 表达式的含义是,在每小时的第 3 分钟到第 59 分钟之间的每 5 分钟执行一次 /opt/check_soffice.sh 脚本

Responses
  1. 1

    1

    Reply
  2. 1

    1

    Reply
  3. 1

    555

    Reply
  4. 叼茂SEO.bfbikes.com

    Reply
  5. 不错不错,我喜欢看 https://www.237fa.com/

    Reply
  6. 想想你的文章写的特别好https://www.ea55.com/

    Reply
  7. 不错不错,我喜欢看 www.jiwenlaw.com

    Reply
  8. 哈哈哈,写的太好了https://www.cscnn.com/

    Reply
  9. 文章的确不错啊https://www.cscnn.com/

    Reply