[英]Bash script commands not running
我的NAS上正在运行seafile( http://www.seafile.com/en/home/ ),并且设置了一个cron选项卡,该选项卡每隔几分钟运行一次脚本,以检查seafile服务器是否已启动,如果没有启动,它将开始
该脚本如下所示:
#!/bin/bash
# exit if process is running
if ps aux | grep "[s]eafile" > /dev/null
then exit
else
# restart process
/home/simon/seafile/seafile-server-latest/seafile.sh start
/home/simon/seafile/seafile-server-latest/seahub.sh start-fastcgi
fi
分别/手动运行/home/simon/seafile/seafile-server-latest/seafile.sh start
和/home/simon/seafile/seafile-server-latest/seahub.sh start-fastcgi
可以正常/无问题地工作,但是当我尝试要手动运行此脚本文件,这些行均不会执行,并且seafile / seahub均不会启动
我的脚本中是否有错误阻止了这两行的执行? 我确保将脚本文件更改为755
问题可能在于,当您将命令通过管道传递给彼此时,您无法确保第二条命令不会在第一条命令之前启动(它可以启动,但是在等待输入时什么也不做)。 例如:
oj@ironhide:~$ ps -ef | grep foo
oj 8227 8207 0 13:54 pts/1 00:00:00 grep foo
有包含单词“富”在我的机器上没有运行的过程,但grep
,我是管道ps
到出现在进程列表ps
产生。
您可以尝试使用pgrep
代替,它是专门为这种事情而设计的:
if pgrep "[s]eafile"
或者,您可以添加另一个管道以过滤出包含grep
结果:
ps aux | grep "[s]eafile" | grep -v grep
如果此脚本的名称与正则表达式[s]eafile
匹配, [s]eafile
很简单地始终使用exit
分支。
无论如何,您可能应该优先使用pidof
重塑in牛棚。
事实证明,脚本本身可以正常运行,尽管使用pgrep的更改要好得多。 问题实际上出在crontab中(命令中未包含sh)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.