微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – bash cron flock screen

我正在使用cron定期运行bash脚本,并尝试使用flock来防止此脚本及其创建的进程多次运行.

crontab中每分钟运行它的条目是:

*/1 * * * * flock -n /tmp/mylockfile /home/user/myscript.sh arg1 arg2

问题是,myscript.sh在分离模式下生成多个screen会话,它包含

for i in {1..3}; 
do 
    screen -d -m ./mysubscript.sh arg3
done

如上所示运行“-d -m”的屏幕以“分离”模式启动屏幕作为分叉进程,但这些进程不会从flock继承锁定,因此每分钟运行mysubscript.sh的新屏幕进程会出现3分钟.

如果我使用“-D -m”代替那么只有一个屏幕进程一直运行,直到mysubscript.sh完成,而不是三个.

如果没有运行mysubscript.sh的屏幕进程正在运行,我需要的是flock只运行myscript.sh.

怎么能实现这一目标?屏幕或鸡群中是否有标志可以帮助实现这一目标?

编辑:如果我将for循环中的行更改为运行mysubscript.sh作为后台进程:

./mysubscript.sh arg3 &

锁定行为正是我想要的,除了我不再有单独的屏幕.

解决方法:

根据您的确切需要,您可以连续运行下标循环,也可以为每个循环创建单独的屏幕会话.

多屏方法

screens.sh

#!/bin/bash

if ! screen -ls | grep -q "screenSession"
    then
        for i in {1..3};
            do
                screen -S screenSession_${i} -d -m sh mysubscript.sh arg3 &
            done
            { echo "waking up after 3 seconds"; sleep 3; } &
            wait # wait for process to finish
            exit # exit screen
    else echo "Screen Currently Running"
fi

会议

62646.screenSession_1   (Detached)
62647.screenSession_2   (Detached)
62648.screenSession_3   (Detached)

方法将为循环的每个迭代设置屏幕并执行下标.如果cron碰巧在仍有活动套接字的情况下尝试运行脚本,那么它将退出直到下一个cron.

单屏调用方法

screencaller.sh

#!/bin/bash

if ! screen -ls | grep -q "screenSession"
    then screen -S screenSession -d -m sh screen.sh
    else echo "Screen Currently Running"
fi

screen.sh

#!/bin/bash

for i in {1..3}; 
do 
    sh mysubscript.sh arg3
done

{ echo "waking up after 3 seconds"; sleep 3; } &

wait # wait for process to finish
exit # exit screen

会议

59916.screenSession (Detached)

方法使用单独的调用程序脚本,然后在同一个屏幕会话中依次循环下标.

这两种方法都会像这样执行(例如,screens.sh或screencaller.sh):

*/1 * * * * flock -n /tmp/mylockfile screens.sh arg1 arg2

或者,如果您想从CLI手动运行它,请执行以下操作:

$sh screens.sh

如果你想进入会话,你只需要调用screen -r screenSession.其他一些有用的命令是screen -ls和ps aux | grep屏幕,显示您当前正在运行的屏幕和进程.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐