19

我有一个用于启动服务器的脚本,用于启动服务器,然后告诉它在 launchd 将其终止时正常退出(应该在关机时)。我的问题:告诉脚本空闲直到它收到信号的适当的惯用方式是什么?我应该只使用 while-true-sleep-1 循环,还是有更好的方法来做到这一点?

#!/bin/bash

cd "`dirname "$0"`"

trap "./serverctl stop" TERM
./serverctl start

# wait to receive TERM signal.
4

3 回答 3

7

您可以简单地使用“无限睡眠”。如果您想在关机时执行更多操作并且不想为此创建函数,则替代方法可能是:

#!/bin/bash
sleep infinity & PID=$!
trap "kill $PID" INT TERM

echo starting
# commands to start your services go here

wait

# commands to shutdown your services go here
echo exited

“sleep infinity”的另一种替代方案(例如,busybox 似乎不支持它)可能是“tail -fn0 $0”。

于 2016-08-24T16:27:26.137 回答
5

即使在其中休眠, plainwait也比自旋锁占用的资源要少得多。

于 2011-12-06T14:24:32.853 回答
1

为什么要保持脚本运行?有什么理由吗?如果您在发出信号后不做任何事情,那么我看不出有什么原因。

当您从关闭中获得 TERM 时,您的 serverctl 和服务器可执行文件(如果有)也同时获得 TERM。

要按设计执行此操作,您必须将 serverctl 脚本安装为 rc 脚本并让 init(启动和)停止它。在这里,我描述了如何设置最初不是作为服务器工作的服务器进程。

于 2011-12-01T10:44:37.763 回答