我正在尝试在.sh
每天运行的 PHP 脚本中包含一个重新启动 apache2 服务器的调用,以在我的服务器上执行维护例程。我可以通过调用pkill -9 apache2
php 来终止 apache 服务器并清除所有排队的 apache 进程exec
。我这样做是为了确保服务器上积累的所有 apache 进程都被删除,并且不会影响服务器的运行。
一旦 apache 进程被终止,我就会尝试通过/etc/init.d/apache2 restart
类似的exec
调用来重新启动 apache 服务器,但是我收到以下错误:
sh: /etc/init.d/apache2/: not found
如果我从命令行运行相同的命令,它会按预期执行,只是不在脚本内.sh
。此脚本内的其他 shell 命令也可以无问题地执行。
如果有人能解释一下这个问题,我将不胜感激。提前致谢。
答案1
好吧,首先要知道的是运行 php 脚本(通常是 Debian 下的 www-data)的用户没有停止或启动 apache 的权限。
另外,如果您使用 Php 停止 Apache,那么如果 Apache 服务器关闭,Php 如何启动 Apache(因此 php 将不会被执行)
那么第二件事就是为什么你不简单地执行 /etc/init.d/apache2 stop 而是杀死它?如果我们忘记了用户 www-data 的权限,你应该在 .sh 文件中拥有:
#!/bin/sh
/etc/init.d/apache2 stop
#
# Maintenance routine
#
/etc/init.d/apache2 start
至少,为什么使用 Php 对服务器进行维护?不能使用 cron 执行的 shell 脚本吗?