簡體   English   中英

bash cron植絨屏幕

[英]bash cron flock screen

我正在使用cron定期運行bash腳本,並嘗試使用flock防止此腳本及其創建的進程多次運行。

每分鍾運行一次的crontab中的條目是:

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

問題是,myscript.sh以分離模式生成多個屏幕會話,其中包含

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

上面帶有“ -d -m”的運行屏幕以分叉進程的形式在“分離”模式下啟動屏幕,但是這些進程不會繼承flock的鎖定,因此每分鍾都會顯示3個運行mysubscript.sh的新屏幕進程。

如果我改用“ -D -m”,那么直到mysubscript.sh完成之前,始終只運行一個屏幕進程,而不是三個。

我需要的是僅在沒有運行mysubscript.sh的屏幕進程正在運行時才運行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其他有用的命令還有screen -lsps aux | grep screen ps aux | grep screen ,顯示您當前正在運行的屏幕和進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM