在单实例模式下使用xinetd运行shell脚本

时间:2012-12-03 14:34:50

标签: linux bash sockets shell xinetd

我想在用户尝试执行由xinetd启动并作为单个实例运行的远程脚本时向用户提供一些反馈。

通过UDP或TCP套接字,用户将一些文本发送到xinetd正在侦听的端口。如果脚本尚未使用,则会执行该脚本,但如果不是,我想向用户提供一些反馈,例如“抱歉,此脚本已在使用中。稍后再试。” 怎么可以这样做?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

在Linux上,您可以使用util-linux中的flock实用程序:

if ! ( flock -n 42 || exit 1

    # Things to do in the single instance
    echo "Processing..."
    sleep 60 
    echo "Done" 

    exit 0
 ) 42> /var/tmp/mylockfile  # any unique filename
then 
    # Things to do when the script is in use
    echo "Sorry, the service is in use."
fi

只需确保()中的子shell以成功结束(例如此处使用exit 0),否则then-clause将在您的进程完成后启动。