微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Crontab无法运行Shell

如何解决Crontab无法运行Shell

一个命令来启动一个服务 su -s /bin/bash nuance -c '$JAVA_HOME/bin/java -Dlog4j.configurationFile=$NLPS_HOME/config/log4j2.xml -jar $NLPS_HOME/lib/nlps.jar --spring.config.location=$NLPS_HOME/config/,$nuance_data_dir/system/config/User-nlps01.properties watcher.RestartOnFailure=FALSE watcher.SendAlarmsToWatcher=FALSE > /dev/null 2>&1 &'我希望此命令在我的rhel 7 linux启动时运行。所以我尝试了crontab,它是@reboot sh /execute/nlp.sh

但是它不起作用,我不知道为什么。请告诉我我做错了什么,我被困住了 在nlp.sh内部:

#!/bin/bash
/bin/su -s /bin/bash nuance -c '$JAVA_HOME/bin/java -Dlog4j.configurationFile=$NLPS_HOME/config/log4j2.xml -jar $NLPS_HOME/lib/nlps.jar --spring.config.location=$NLPS_HOME/config/,$nuance_data_dir/system/config/User-nlps01.properties  watcher.RestartOnFailure=FALSE watcher.SendAlarmsToWatcher=FALSE > /dev/null 2>&1 &'

解决方法

您需要定义$JAVA_HOME$NLPS_HOME$NUANCE_DATA_DIR环境变量,这些变量需要在脚本执行之前定义和导出。

export JAVA_HOME=/path/to/java/home
export NUANCE_DATA_DIR=/path/to/nuance/dir
export NLPS_HOME=/path/to/npls/home
,

您必须使用双引号对变量进行插值。单引号不会插入任何内容,但双引号可以插入。

/bin/su -s /bin/bash nuance -c "$JAVA_HOME/bin/java -Dlog4j.configurationFile=$NLPS_HOME/config/log4j2.xml -jar $NLPS_HOME/lib/nlps.jar --spring.config.location=$NLPS_HOME/config/,$NUANCE_DATA_DIR/system/config/User-nlps01.properties  watcher.RestartOnFailure=FALSE watcher.SendAlarmsToWatcher=FALSE > /dev/null 2>&1 &"

来自Bash手册:

3.1.2.2 Single Quotes

将字符括在单引号(')中可保留引号内每个字符的字面值。即使在单引号前加反斜杠,也不能在单引号之间出现单引号。

3.1.2.3 Double Quotes

用双引号(")引起来的字符保留引号内所有字符的文字值,但$`\除外,并且,启用历史记录扩展后,!。字符$`在双引号中保留其特殊含义(请参见Shell Expansions)。仅当反斜杠后面跟随以下字符之一时,才保留其特殊含义:$`"\或换行符。在双引号中,将删除反斜杠,后跟这些字符之一。没有特殊含义的反斜杠前面的字符将保持不变。双引号可以在双引号内加上反斜杠。如果启用,将执行历史记录扩展,除非使用反斜杠将出现在双引号中的!转义。 !前面的反斜杠不会被删除。

特殊参数*@在双引号中具有特殊含义(请参见Shell Parameter Expansion)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?