3

我知道这可能很容易,但我无法弄清楚。我们想在一台机器上运行两个 luigi 实例,因此需要修改 init.d 脚本以将 PID 写入文件,而不是仅仅触摸空文件。

echo -n $"Starting luigid scheduler as $LUIGID_USER: "
( ( /usr/bin/sudo -u $LUIGID_USER $LUIGID_BIN >>/var/log/luigid/server.log 2>&1 ) &)
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/luigid && echo_success || echo_failure
echo
return $RETVAL

目前它只是触及空的PID文件。我希望它将PID写入文件。另外,在停止时,我想通过存储在 PID 文件中的 PID 杀死

echo -n $"Stopping luigid scheduler: "
killproc luigid
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/luigid && echo_success || echo_failure
echo

请问有什么帮助吗?

谢谢

4

2 回答 2

8

您可以使用以下命令获取PID上一个命令的$!

将启动脚本更改为:

echo -n "Starting luigid scheduler as $LUIGID_USER: "
/usr/bin/sudo -u $LUIGID_USER $LUIGID_BIN >>/var/log/luigid/server.log 2>&1 &
RETVAL=$?
PID=$!
[ $RETVAL -eq 0 ] && echo $PID > /var/lock/subsys/luigid && echo_success || echo_failure
echo
return $RETVAL

请注意,当它们在子 shell 中启动程序时,您需要从命令周围删除括号。子shell 不会将启动程序的PID 返回到您的shell,因此您应该直接从您的shell 调用它。

于 2014-11-24T16:26:42.580 回答
0

manshlock应该做的伎俩,我相信:

shlock [-du] [-p PID] -f lockfile

...

shlock uses the link(2) system call to make the final target lock file, which
is an atomic operation (i.e. "dot locking", so named for this mechanisms 
original use for locking system mailboxes).  It puts the process ID ("PID") 
from the command line into the requested lock file.

或者根据情况(manflock,一个很好的例子,看看这个: http ://codehackit.blogspot.fr/2013/04/locking-processes-with-flock.html

于 2014-11-26T19:21:48.813 回答