【问题标题】:shell script runs when executed manually but executes half way through crontabshell 脚本在手动执行时运行,但在 crontab 中执行
【发布时间】:2013-10-18 04:01:58
【问题描述】:

我有一个在 Solaris 服务器上运行的 java 服务。我需要杀死这个服务并在每晚的指定时间重新启动它。因此,我设置了一个 cron 作业来做同样的事情。当我通过命令行手动执行它时,我的脚本工作正常。但是当我将它设置为 cron 作业时,它只执行一半,即它只杀死进程但不启动它。请帮助我。详情如下:

重启脚本:

#!/bin/sh
pkill -u peri java 2>> /dev/null
sleep 3
cd /opt/home/peri/utils/jsb
. /opt/home/peri/utils/jsb/pjsb.new
sleep 3
cd /opt/jar
MonitorExt.sh & > /dev/null

这里的 pkill 正在杀死 java 进程。脚本 pjsb.new 是用于启动 java 进程的脚本。还有一个脚本 MonitorExt.sh 用于启动另一个 java 进程。

非常感谢任何帮助!!!! 在此先感谢

【问题讨论】:

  • 我没有Solaris的经验,但是在Ubuntu使用root密码在脚本中运行sudo命令,例如:sudo -n service mysqld stop | echo $MY_PASSWORD

标签: java shell solaris crontab


【解决方案1】:

1) 在用户 'root' 下,检查 /var/cron/log 中的一些 cron 错误消息

2) 通常当命令/脚本手动运行良好但不能在 cron 作业中运行时,这是因为某些环境变量未在 cronjob 上下文中设置。 因此,您应该确保在您的默认 shell($HOME、$JAVA、...)中自动设置的所有必要环境变量在 cron 作业中运行时都已实际设置

我通常在脚本内部或 cronjob 行中调用配置文件脚本:
15 17 * * * 。 $HOME/.profile && $HOME/script.sh

3) 您还应该更喜欢所有脚本和命令的完整路径:
/usr/bin/pkill
/path/MonitorExt.sh
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多