我编写了一个脚本文件来检查磁盘上的可用空间。如果已用空间高于阈值,我希望重新启动该服务器上的应用程序。
下面是我编写的代码。
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=60
echo $CURRENT
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
echo "inside"
sudo ./script2.sh stop
sudo ./script2.sh start
fi
script2.sh
采用 start|stop
作为参数。
直接从终端执行时,命令 sudo ./script2.sh stop
和 sudo ./script2.sh start
可以正确执行。
第一个命令 sudo ./script2.sh stop
不执行。我猜测是因为 stop
是 Linux 中的一个关键字,因此导致了这个问题。
第二个命令 sudo ./script2.sh start
执行(但由于第一个脚本未执行而给出“地址已在使用中”错误)。
我知道我可能必须将参数值从 start 更改为其他值,但是有没有任何解决方案可以将 stop
作为参数传递给脚本?
最佳答案
尝试使用 root 权限实例化 shell 并在其中运行脚本:
#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=60
echo $CURRENT
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
echo "inside"
sudo bash -c './script2.sh stop'
sudo bash -c './script2.sh start'
fi
这也可以在一行中完成..类似 sudo bash -c './script2.sh stop; ./script2.sh start'.
另请注意,您没有在第一行指定 shell,请使用 shebang,如 #!/bin/bash 或您正在使用的任何 shell
关于linux - 从另一个 shell 脚本执行 shell 脚本并传递关键字作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319788/