![如何使用 cron 作业执行 ConnectAll 应用程序重启脚本](https://linux22.com/image/1183524/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20cron%20%E4%BD%9C%E4%B8%9A%E6%89%A7%E8%A1%8C%20ConnectAll%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E9%87%8D%E5%90%AF%E8%84%9A%E6%9C%AC.png)
您能否指导我以下内容,
添加 ConnectAll 应用程序重启脚本以供参考:
#!/bin/sh -e
# JIRA startup script
#chkconfig: 2345 80 05
#description: JIRA
# Define some variables
# Name of app ( JIRA, Confluence, etc )
APP=connectall
APP1=Mule
# Name of the user to run as
USER=root
# Location of application's bin directory
BASE=/mulesoft/connectall/CATomcat/bin
#BASEMule=/mulesoft/connectall/mulesoft/mule-standalone-3.9.0
# Location of Java JDK
export JAVA_HOME=/usr/jdk1.8.0_171
case "$1" in
# Stop command
stop)
#echo "Stopping $APP"
#/bin/su -m $USER -c "$BASE/shutdown.sh &> /dev/null"
#echo "$APP stopped successfully"
echo "Stopping $APP1"
/bin/su -m $USER -c "/mulesoft/connectall/mulesoft/mule-standalone-3.9.0/bin/mule stop &> /dev/null"
echo "$APP1 stopped successfully"
echo "Stopping $APP"
/bin/su -m $USER -c "$BASE/shutdown.sh &> /dev/null"
echo "$APP stopped successfully"
;;
# Start command
start)
echo "Starting $APP"
/bin/su -m $USER -c "$BASE/startup.sh &> /dev/null"
echo "$APP started successfully"
echo "Starting $APP1"
/bin/su -m $USER -c "/mulesoft/connectall/mulesoft/mule-standalone-3.9.0/bin/mule start &> /dev/null"
echo "$APP1 started successfully"
;;
# Stop command
# stop)
# echo "Stopping $APP"
# /bin/su -m $USER -c "$BASE/bin/shutdown.sh &> /dev/null"
#echo "$APP stopped successfully"
#;;
#Restart command
restart)
$0 stop
sleep 60
$0 start
;;
*)
echo "Usage: /etc/init.d/$APP restart}"
exit 1
;;
esac
上述脚本的名称为 connectall-auto-restart,位于 /mulesoft 位置(这是一个外部挂载)。因此,当我使用 ./connectall-auto-restart restart 从位置 /mulesoft 手动执行脚本时,应用程序可以正常重新启动。
但是当我在如下所示的 cron 作业中配置相同内容时
30 08 1-7 * 6 /mulesoft/connectall-auto-restart
30 08 17-23 * 6 /mulesoft/connectall-auto-restart
cron 准时运行,但 cron 不会启动脚本。(这意味着 cron 触发了作业,但我的应用程序没有重新启动)。
root@balqmu101:/var/log# cat syslog | grep connectall-auto-restart
Sep 18 08:30:01 balqmu101 CRON[3232401]: (root) CMD (/mulesoft/connectall-auto-restart)
我也尝试了以下方法,但同样无效。
30 08 1-7 * 6 /mulesoft/connectall-auto-restart restart
30 08 17-23 * 6 /mulesoft/connectall-auto-restart restart
问候 Aravind Viswanathan
答案1
通过 运行的作业cron
,或者systemd
启动脚本不会在与桌面相同的运行时环境中运行。systemd
启动脚本以 运行root
。您的任何PATH
更改或其他环境变量设置都不会~/.bashrc
自动传播到您的cron
作业。例如,没有$DISPLAY
,因此 GUI 程序需要特殊处理(阅读man xhost
)。
cron
人们可以在crontab
文件 Read中为所有作业设置环境变量man 5 crontab
。
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每个环境中的结果 。
由于command
该行的一部分crontab
默认由 解释/bin/sh
,其语法比 更简单/bin/bash
,因此我建议command
调用一个bash
脚本(可执行、已安装、以 开头#!/bin/bash
)来设置环境,然后调用所需的程序。