【发布时间】:2016-03-28 00:23:34
【问题描述】:
我有以下 Upstart 脚本。当我运行以下命令service worker-1 start 时,一切正常。我可以看到使用ps aux | grep php 运行的工人。我也可以使用service worker-1 stop,我需要重新启动/更新工作人员。但不幸的是,此脚本仅在重新启动时部分起作用。脚本已执行(开始:作业已在运行:当我尝试service worker-1 start 时,worker-1)但我没有看到任何正在运行的带有ps aux | grep php 的工人,当然service worker-1 stop 返回stop: Unknown instance:。你知道哪里出了问题吗?
description "Starts/kills workers."
author "Jiri Mihal"
start on (started php5-fpm and started mysql)
stop on shutdown
pre-start script
echo "[`date`] Workers started" >> /var/log/worker-1.log
exec 2>>/var/log/worker-1.log
end script
post-start script
echo $$ > /var/run/worker-1.pid
for i in `seq 1 5`;
do
exec php /home/jiri/workers/dlapi.workers/workers/RpcWorkerLauncher.php Worker-1 >/dev/null 2>&1 &
done
end script
post-stop script
read -r FIRSTLINE < /var/run/worker-1.pid
kill $(($FIRSTLINE + 2))
kill $(($FIRSTLINE + 3))
kill $(($FIRSTLINE + 4))
kill $(($FIRSTLINE + 5))
kill $(($FIRSTLINE + 6))
rm /var/run/worker-1.pid
echo "[`date`] Workers stopped" >> /var/log/worker-1.log
end script
【问题讨论】:
-
只是猜测,但在重新启动时,我会假设运行启动脚本/服务的用户不是您,并且可能是 root。您是否尝试过使用 sudo 甚至 su 来运行命令并运行它。
-
是的,我试过了,我可以用 sudo 运行上面的命令,没有任何问题。我也可以以 root 用户身份运行这些命令。但我可以尝试将路径从用户文件夹更改为某个“系统”文件夹。也许用户的文件夹在启动早期不可用。
-
尝试使用类似这样的东西 (askubuntu.com/questions/20229/…) 将启动时的用户切换到另一个用户(您自己)并在该用户下运行启动命令/服务。
-
@Mihi 注意:sudo 在功能上与 root 用户相同