Linux Bash脚本命令未运行
我在NAS上运行了seafile(),我设置了一个cron选项卡,每隔几分钟运行一个脚本,以检查seafile服务器是否已启动,如果未启动,它将启动它 脚本如下所示:Linux Bash脚本命令未运行,linux,bash,shell,Linux,Bash,Shell,我在NAS上运行了seafile(),我设置了一个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/seafil
#!/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/seafile server latest/seahub.sh start fastcgi
不会出现问题,但当我尝试手动运行此脚本文件时,这些行都不会执行,seafile/seahub也不会启动
我的脚本中是否存在阻止执行这两行的错误?我已确保将脚本文件chmod为755问题可能是,当您将命令相互导入时,无法保证第二个命令不会在第一个命令之前启动(它可以启动,但在等待输入时不会执行任何操作)。例如:
oj@ironhide:~$ ps -ef | grep foo
oj 8227 8207 0 13:54 pts/1 00:00:00 grep foo
我的机器上没有运行包含单词“foo”的进程,但是我正在管道ps
的grep
将显示在ps
生成的进程列表中
您可以尝试改用pgrep
,它基本上是为这类事情而设计的:
if pgrep "[s]eafile"
或者,您可以添加另一个管道以过滤出包含grep
的结果:
ps aux | grep "[s]eafile" | grep -v grep
问题很可能是,当您将命令导入另一个命令时,您无法保证第二个命令不会在第一个命令之前启动(它可以启动,但在等待输入时不会执行任何操作)。例如:
oj@ironhide:~$ ps -ef | grep foo
oj 8227 8207 0 13:54 pts/1 00:00:00 grep foo
我的机器上没有运行包含单词“foo”的进程,但是我正在管道ps
的grep
将显示在ps
生成的进程列表中
您可以尝试改用pgrep
,它基本上是为这类事情而设计的:
if pgrep "[s]eafile"
或者,您可以添加另一个管道以过滤出包含grep
的结果:
ps aux | grep "[s]eafile" | grep -v grep
问题很可能是,当您将命令导入另一个命令时,您无法保证第二个命令不会在第一个命令之前启动(它可以启动,但在等待输入时不会执行任何操作)。例如:
oj@ironhide:~$ ps -ef | grep foo
oj 8227 8207 0 13:54 pts/1 00:00:00 grep foo
我的机器上没有运行包含单词“foo”的进程,但是我正在管道ps
的grep
将显示在ps
生成的进程列表中
您可以尝试改用pgrep
,它基本上是为这类事情而设计的:
if pgrep "[s]eafile"
或者,您可以添加另一个管道以过滤出包含grep
的结果:
ps aux | grep "[s]eafile" | grep -v grep
问题很可能是,当您将命令导入另一个命令时,您无法保证第二个命令不会在第一个命令之前启动(它可以启动,但在等待输入时不会执行任何操作)。例如:
oj@ironhide:~$ ps -ef | grep foo
oj 8227 8207 0 13:54 pts/1 00:00:00 grep foo
我的机器上没有运行包含单词“foo”的进程,但是我正在管道ps
的grep
将显示在ps
生成的进程列表中
您可以尝试改用pgrep
,它基本上是为这类事情而设计的:
if pgrep "[s]eafile"
或者,您可以添加另一个管道以过滤出包含grep
的结果:
ps aux | grep "[s]eafile" | grep -v grep
如果此脚本的名称与regex
[s]eafile
匹配,它将始终执行exit
分支
您可能应该使用
pidof
,而不是改造牦牛棚 如果此脚本的名称与regex[s]eafile
匹配,则它通常会执行退出
分支
您可能应该使用
pidof
,而不是改造牦牛棚 如果此脚本的名称与regex[s]eafile
匹配,则它通常会执行退出
分支
您可能应该使用
pidof
,而不是改造牦牛棚 如果此脚本的名称与regex[s]eafile
匹配,则它通常会执行退出
分支
您可能应该使用
pidof
,而不是改造牦牛棚 结果是脚本本身工作正常,尽管使用pgrep的变化要好得多。问题实际上出现在crontab中(命令中没有包含sh)结果是脚本本身工作正常,尽管使用pgrep的更改要好得多。问题实际上出现在crontab中(命令中没有包含sh)结果是脚本本身工作正常,尽管使用pgrep的更改要好得多。问题实际上出现在crontab中(命令中没有包含sh)结果是脚本本身工作正常,尽管使用pgrep的更改要好得多。问题实际上出现在crontab中(命令中没有包含sh)