Linux Crontab无法运行shell
有一个启动服务的命令Linux Crontab无法运行shell,linux,bash,shell,sh,nuance,Linux,Bash,Shell,Sh,Nuance,有一个启动服务的命令 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\u DATA\u DIR/system/config/User-nlps01.properties watcher.Restar
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\u DATA\u DIR/system/config/User-nlps01.properties watcher.RestartOnFailure=FALSE watcher.sendarmstowatcher=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\u HOME
,$NLPS\u HOME
和$NUANCE\u DATA\u 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手册:
将字符括在单引号(”
)中会保留引号中每个字符的文字值。单引号不能出现在单引号之间,即使前面有反斜杠
将字符括在双引号中(“
)将保留引号中所有字符的文字值,但$
、`
、\
除外,并且,当启用历史扩展时,!
。字符$
和`
在双引号中保留其特殊含义(请参阅)。反斜杠只有在后跟以下字符之一时才保留其特殊含义:$
,`
,“
、\
或换行符。在双引号中,后跟这些字符之一的反斜杠将被删除。没有特殊含义的反斜杠前面的字符将保持不变。双引号可以通过在双引号中加反斜杠来引引。如果启用,将执行历史扩展,除非出现在双引号中的n!
使用反斜杠转义。不删除!
前面的反斜杠
特殊参数
*
和@
在双引号中具有特殊意义(请参阅).这实际上是有道理的,我确实放了环境变量,但仍然没有运气,甚至给出了完整的路径。我不知道为什么该命令可以直接执行shell文件,但不能在crontab、systemd service甚至/etc/init.d/上运行。可能有几个原因。你可以检查cron日志。对于ubuntu`grep cron/var/log/syslog`是的,我试过用双引号括起来。有没有什么方法可以在启动时执行这个命令,甚至可以通过任何shell调用它?我不知道怎么做