我正在尝试查找或实现一个简单的解决方案,该解决方案可以按顺序排队Linux shell命令,以便一次执行一个。以下是标准:
最初我认为at
命令可以做我想要的,但唯一的一点是它不会按顺序执行命令。
我正在考虑使用以下部分在python中实现我自己的解决方案:
fcntl
模块编写python脚本,以确保只有1个脚本实例正在运行这听起来有效吗?我不知道如何处理的唯一竞争条件是当脚本的第一个实例检查目录并看到它是空的时,在解锁锁定文件之前,新命令排队并调用脚本的新实例。当新脚本看到文件被锁定时,它将退出。然后原始脚本将解锁文件并退出。
那里有没有已经做过的事情,所以我不必自己实现这个?
答案 0 :(得分:5)
使用命名管道,即FIFO:
mkfifo /tmp/shellpipe
启动一个shell进程,其输入来自管道:
/bin/sh < /tmp/shellpipe
当Web服务器想要执行命令时,它会将其写入管道。
sprintf(cmdbuf, "echo '%s' > /tmp/shellpipe", command);
system(cmdbuf);
答案 1 :(得分:1)
posix message queue似乎为此而量身定制,并且比使用带时间戳的文件等更简单(也更快)。脚本可以在请求进入时将其排队;另一个脚本使请求出列并执行它们。有一些大小限制适用于队列,但听起来并不像你会接近它们。