从bash开始apachectl

10

我正在编写一个bash文件。我需要从我的bash文件中启动apachectl,因此我写了以下代码:

apachectl start

以root身份运行时,发生了一个错误:

apachectl: command not found

我搜索了一下,发现我应该使用su -而不是su来成为超级用户

现在,我想知道:

  • 为什么会出现这个错误?

  • 我怎样才能使用su运行它呢?


2
看起来 apachectl 不在您的路径中。请尝试 find / -name apachectl - cnicutar
是的,谢谢,它在 /usr/sbin/ 目录下。所以谢谢! - Behnam Safari
10个回答

19

在Shell脚本中,执行命令时应该使用完整的路径,除非可执行文件所在的目录已经在$PATH中。 例如,查找apachectl二进制文件的位置:

which apachectl
或者
whereis apachectl

然后您将得到类似以下的内容:

/usr/local/sbin/apachectl

那么,就使用它。


9
命令未找到的错误是因为“apachectl”不在您的路径中。只需使用命令的完整路径,例如:

/etc/init.d/apachectl start

如果出现权限被拒绝的错误,则需要以不同的用户身份运行。这是另一个问题。


5
使用find命令首先定位apachectl。
find / -name apachectl

假设这是从find命令得出的位置,您可以通过运行status命令来测试它。

/usr/local/sbin/apachectl status

如果出现问题,您可能需要重新启动Apache。

/usr/local/apache/bin/apachectl restart

2

看起来,命令apachectl不在您的环境路径中。找到apachectl所在的目录,并将其添加到您的PATH中,或使用完整路径启动它。大多数现代发行版使用sudo允许用户获得提升的权限,因此如果可用,您应该使用sudo


1
以下命令适用于我:
sudo /usr/sbin/apachectl -kstart

1
上面的答案对我很有帮助,但命令应该是这样的:
sudo netstat -tanp
sudo ss -tanp 'sport = 80'
sudo apt-get remove lighttpd
sudo <path>/apachectl -kstart

0
这个问题虽然比较老,但在谷歌上仍然有人搜索,所以对于未来的读者:请注意,在某些发行版(如Debian)中,它是一个只能使用sudo命令的命令,如果不使用sudo运行它会导致错误:command not found。因此,为了运行它,请使用sudo。另外,如果你想知道二进制文件的位置,我推荐最简单的方法(如果使用APT)是:
$ dpkg -L apache2 | grep apachectl
/usr/sbin/apachectl
/usr/share/man/man8/apachectl.8.gz

正如您所看到的,它位于 sbin 目录下,这意味着它是专属于管理员空间的。


0

我遇到了同样的问题。你可以先运行以下命令:

export PATH=$PATH:/sbin

然后使用apachectl restart等命令。


0

首先停止所有 httpd 服务...

sudo killall -9 httpd

其次,找到apachectl。在终端中按下ctrl+r,输入“apachectl”单词以查找“apachectl”的路径。

选择后:

sudo <path>/apachectl stop|start

启动 Apache 后,输入 sudo service httpd start。 - diegohsi

-1

嗯,当你的端口被其他服务占用时,这种情况就会发生。因为你知道

服务是用来编写netstat命令的下一个命令:

  • sudo netstat -tanp。

如果你想知道8080端口的使用情况,请使用以下命令:

  • trong textsudo ss -ntlp 'sport = 80'。

在我的情况下,运行了lighttpd,所以应用以下命令:

  • sudo apt-get remove lighttpd。

请改进语法,解释不太清楚。 - RootPhoenix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接