Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Crontab无法运行shell_Linux_Bash_Shell_Sh_Nuance - Fatal编程技术网

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调用它?我不知道怎么做