亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 如何判斷shell是否在運(yùn)行(包括sleep狀態(tài))? [打印本頁]

作者: yyg747    時間: 2014-07-10 12:56
標(biāo)題: 如何判斷shell是否在運(yùn)行(包括sleep狀態(tài))?
crontab指定每日運(yùn)行一次shell A,
shell A中會掃描某目錄下的文件進(jìn)行處理,如果存在該文件,處理完成后shell退出,不影響第二天crontab
如果該目錄一直不存在該文件,則shell  sleep 300后再次嘗試,一直循環(huán)。

如果到第二日crontab執(zhí)行時,前一日的shell恰逢sleep期間,這時怎么判斷該shell在運(yùn)行?

目前采用的 if test $(ps -ef | grep A |grep -v grep | wc -l)  -eq 0,但發(fā)現(xiàn)不起作用,sleep的時候進(jìn)程名就變成sleep 300了,這句話就不生效了。

有沒有合適的解決方法?
作者: expert1    時間: 2014-07-10 13:33
沒太看懂,
提供個思路看看行么
運(yùn)行touch 一個pid,下次存在就退出,不存在就運(yùn)行,運(yùn)行完畢rm -f pid
作者: q1208c    時間: 2014-07-10 14:10
本帖最后由 q1208c 于 2014-07-10 16:43 編輯

樓主的問題是典型的單進(jìn)程shell.

如果為了安全, 可以試試下面的做法.
1. pidfile, 在腳本運(yùn)行時生成, 結(jié)束時刪除. 如果有pidfile, 說明腳本可能在執(zhí)行. "可能", 是因?yàn)槿绻_本是被kill, 或異常退出的, pidfile 可能沒有正確刪除.
2. 如果pidfile存在, 讀取 pid, 判斷該pid是否存在, 如果 pid 不存在, 說明進(jìn)程已經(jīng)結(jié)束(可能正常, 也可能是被kill).
3. 如果pid存在, 讀取 /proc/<pid>/cmd, 判斷是否是同一個腳本, 因?yàn)閜id可能會重復(fù)的.

我以前還用了 lockfile, 剛才想想, 覺得 pidfile 應(yīng)該可以代替lockfile了.

----
看了上面兄弟的回復(fù), 忽然想到,我為啥要用兩個文件了, 一個 pidfile, 一個 lockfile, 是為了防止文件被誤刪除.
作者: Kasiotao    時間: 2014-07-10 15:40
好方法啊,學(xué)習(xí)了
作者: 用戶名注冊后不能更改    時間: 2014-07-10 16:47
回復(fù) 3# q1208c

記得以前和誰爭過lockfile的問題……
誤刪除這種事,總覺得是防不住的。
作者: q1208c    時間: 2014-07-10 16:56
回復(fù) 5# 用戶名注冊后不能更改

所以才有兩個文件, 一個 pid, 一個lock. 這樣, 誤刪的概率小一點(diǎn).
   
作者: yyg747    時間: 2014-07-10 22:37
回復(fù) 6# q1208c


    lock和pid的思路是什么?
作者: q1208c    時間: 2014-07-11 08:14
回復(fù) 7# yyg747

如果你機(jī)器上有 rpm 包安裝的 httpd, 你可以看一下 /etc/init.d/httpd 這個腳本. 這里有 pid, 有 lock.

只不過, 它好象并沒有判斷 pid 里是不是 apache, 這一點(diǎn), 我確認(rèn)過, 只要相同的pid存在, 新的apache 就不會啟動.
所以, 我才在自己寫的時候, 一定要讀到 /proc/<pid>/cmd, 已確認(rèn)是同一個進(jìn)程.
   
作者: 用戶名注冊后不能更改    時間: 2014-07-11 11:22
回復(fù) 8# q1208c

init.d中的各種例子確實(shí)經(jīng)典。
不過我好像從來沒有仔細(xì)讀過- -
作者: s57445560    時間: 2014-07-16 10:46
#!/bin/bash
while true
do
        if (ps -fe |grep "sleep 1111"|grep -v grep)
        then
                sleep 10
        else
                (sleep 1111)&
        fi
done




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2