确保只有给定脚本的一个实例运行的最简单/最好的方法是什么 - 假设它是Linux上的Bash?
目前我正在做:
ps -C script.name.sh > /dev/null 2>&1 || ./script.name.sh
Run Code Online (Sandbox Code Playgroud)
但它有几个问题:
-C 仅检查进程名称的前14个字符当然,我可以编写自己的pidfile处理,但我觉得应该有一个简单的方法来实现它.
我想阻止我的脚本一次运行多次.
我目前的做法是
为了防止进程挂起,我设置了一个cron作业,定期检查文件是否超过了最大允许的运行时间,如果文件仍然在运行,则会终止该进程.
是否存在我正在杀死错误进程的风险?
有没有更好的方法来执行这个整体?
关于那个线程: bash flock:如果无法获取锁定则退出
如果有人能向我解释'200'代表什么,我将不胜感激.
我已经阅读了关于flock的内容,如果要指定文件描述符,似乎有200个,但这个数字有什么好处呢?
有谁知道如何在bash脚本中锁定函数?我想做一些类似Java的事情(例如同步),以确保保存在受监控文件夹中的每个文件都试图使用Submit功能。
我的脚本摘录:
(...)
ON_EVENT () {
local date = $1
local time = $2
local file = $3
sleep 5
echo "$date $time New file created: $file"
submit $file
}
submit () {
local file = $1
python avsubmit.py -f $file -v
python dbmgr.py -a $file
}
if [ ! -e "$FIFO" ]; then
mkfifo "$FIFO"
fi
inotifywait -m -e "$EVENTS" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %f' "$DIR" > "$FIFO" &
INOTIFY_PID=$!
trap "on_exit" 2 3 15
while read date …
Run Code Online (Sandbox Code Playgroud)