我正在编写一个bash文件。我需要从我的bash文件中启动apachectl
,因此我写了以下代码:
apachectl start
以root身份运行时,发生了一个错误:
apachectl: command not found
我搜索了一下,发现我应该使用su -
而不是su
来成为超级用户。
现在,我想知道:
为什么会出现这个错误?
我怎样才能使用
su
运行它呢?
在Shell脚本中,执行命令时应该使用完整的路径,除非可执行文件所在的目录已经在$PATH中。 例如,查找apachectl二进制文件的位置:
which apachectl
或者whereis apachectl
然后您将得到类似以下的内容:
/usr/local/sbin/apachectl
那么,就使用它。
/etc/init.d/apachectl start
如果出现权限被拒绝的错误,则需要以不同的用户身份运行。这是另一个问题。
find / -name apachectl
假设这是从find命令得出的位置,您可以通过运行status命令来测试它。
/usr/local/sbin/apachectl status
如果出现问题,您可能需要重新启动Apache。
/usr/local/apache/bin/apachectl restart
看起来,命令apachectl
不在您的环境路径中。找到apachectl
所在的目录,并将其添加到您的PATH
中,或使用完整路径启动它。大多数现代发行版使用sudo
允许用户获得提升的权限,因此如果可用,您应该使用sudo
。
sudo netstat -tanp
sudo ss -tanp 'sport = 80'
sudo apt-get remove lighttpd
sudo <path>/apachectl -kstart
$ dpkg -L apache2 | grep apachectl
/usr/sbin/apachectl
/usr/share/man/man8/apachectl.8.gz
正如您所看到的,它位于 sbin
目录下,这意味着它是专属于管理员空间的。
我遇到了同样的问题。你可以先运行以下命令:
export PATH=$PATH:/sbin
然后使用apachectl restart
等命令。
首先停止所有 httpd 服务...
sudo killall -9 httpd
其次,找到apachectl。在终端中按下ctrl+r,输入“apachectl”单词以查找“apachectl”的路径。
选择后:
sudo <path>/apachectl stop|start
嗯,当你的端口被其他服务占用时,这种情况就会发生。因为你知道
服务是用来编写netstat命令的下一个命令:
如果你想知道8080端口的使用情况,请使用以下命令:
在我的情况下,运行了lighttpd,所以应用以下命令:
apachectl
不在您的路径中。请尝试find / -name apachectl
。 - cnicutar