看板 Linux 關於我們 聯絡資訊
各位板上先進好 目前手邊有個shell script不知如何寫,想請教各位 問題:目前我執行第一個程式,它會產生A file及B file(兩個file產生的時間不同), 我需要等待兩個file都產生之後才能執行第二個程式,想請教該如何寫 不曉得是否要用到每隔一段時間就檢查一遍兩個file是否產生 謝謝^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.205.229 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1465202420.A.E14.html
filiaslayers: 我記得有函數可以用 06/06 17:24
Neisseria: 用 make 或者是其他類似的工具,可以設定執行順序 06/06 17:46
asilzheng: 為何不在第一個程式執行完才呼叫第二個? 06/06 18:19
andy433268: 兩個檔案都是程式執行完才會產生的 06/06 18:53
Bellkna: 用返回值來判定? 06/06 20:44
chang505: 最簡單的方式就是用 ls find 之類的東西去判斷檔案存在 06/06 23:49
chang505: 與否 都存在再繼續 run 就好 06/06 23:49
chang505: 但是這種敘述應該就跟3F一樣的方式就可以了吧 06/06 23:51
pizzahut: 判斷檔案存在的個數 = 2 就可以執行下一個程式 06/07 09:55
bitlife: google inotify 06/07 10:05
filiaslayers: 推樓上正解 06/07 19:30
andy433268: 我再嘗試b大所說的看能不能成功 06/07 23:53
lspci: [ -f AFILE -a -f BFILE ] && PROG2 ? 06/08 06:58
andy433268: inotify在/usr/local/bin底下找不到,似乎不能使用 06/08 11:28
bitlife: inotify 是統稱,有分system call以及binary utility,你要 06/08 11:34
bitlife: 用在shell script.請看man inotify的SEE ALSO裏面括號標 06/08 11:35
bitlife: 示為(1)的 06/08 11:35
andy433268: 在SEE ALSO裡面只有括號標示為2的 06/08 13:05
andy433268: inotify_add_watch(2),inotify_init(2)...後面都是2 06/08 13:06
bitlife: 系統內有沒有 inotifywait 和 inotifyatch? 06/08 13:13
bitlife: inotifywatch 06/08 13:16
andy433268: 你指的系統內是指在/usr/local/bin底下嗎?底下都無 06/08 13:27
andy433268: 我看到google有人在cshell使用inotifywait,他就是從 06/08 13:31
andy433268: /usr/local/bin/inotifywait去呼叫,但我去使用linux 06/08 13:32
andy433268: 都會回覆command not found.感覺系統沒安裝 06/08 13:33
bitlife: 以我用的ubuntu 14.04為例是安裝inotify_tools套件,執行 06/08 13:47
bitlife: 檔在 /usr/bin 下,你可能要看一下你的系統如何安裝 06/08 13:47
bitlife: inotify-tools 06/08 13:48
andy433268: b大 請問有程式執行完,系統休息5秒,再繼續run下個程式 06/08 14:26
andy433268: 的command嗎? 謝謝 06/08 14:27
bitlife: man sleep 06/08 16:13
andy433268: sleep我有用過他是一開始就啟動了,並不是程式執行完 06/08 17:43
andy433268: 才啟動,不曉得有無方法 06/08 17:44
bitlife: 不懂意思,不是script裏面某命令A完成要等5秒後再繼續命令 06/08 17:57
bitlife: B,A和B中間就加sleep. 看不懂你所想表達的意思 06/08 17:58
Bencrie: 原 po 跑的程式是會強制送背景嗎? 06/08 19:49
Bencrie: 而且萬一檔案剛建立東西還沒寫入,第二個程式就起來怎麼辦 06/08 19:53
bitlife: 要確保檔案全部產生完成才進行下一步,可以先產生暫時檔名 06/08 20:25
bitlife: ,等寫檔完成關檔後,執行檔案改名(假設為F),inotify則監視 06/08 20:26
bitlife: F檔案產生才進行下一個程式 06/08 20:26
andy433268: 應該是我執行的程式都在背景跑,所以sleep才一起動作 06/08 20:55
andy433268: 照這樣在背景執行的話似乎就沒辦法用sleep 06/08 20:56
bitlife: 還是可以,我不知道你的整個流程,不過你需要一個監管程式 06/08 20:57
bitlife: 負責在適當的時間執行該被執行的程式,等待5秒是由這個監 06/08 20:57
bitlife: 管程式負責等,等5秒後再背景執行下個程式 06/08 20:58
bitlife: 如果依本文一開始說的要2個檔案都完成再進行下一步,假設 06/08 20:58
bitlife: 這[下一步]開始之前要等5秒,那就是監管程式用inotifywait 06/08 20:59
andy433268: 現在的目的是程式在背景執行,執行完等待5秒再執行第2 06/08 20:59
bitlife: 監視2個檔案都完全產生了,由監管程式sleep等5秒後再執行 06/08 20:59
bitlife: [下一步] 06/08 20:59
andy433268: 個程式在背景 看各位不知有無解決的方法 謝謝 06/08 21:00
bitlife: 看來可以用我上面推文的作法,總之就是你需要一個監管程式 06/08 21:01
bitlife: 由它負責在正確的時機背景執行下個要執行的程式 06/08 21:01
Bellkna: 感覺寫成背景服務比較萬無一失 06/08 21:27
Bencrie: 應該可以先 wait A 再直接跑 B。如果 A 會結束的話 XD 06/08 21:38
Bencrie: 如果 A 結束表示東西都有正常產出的話就用 wait 吧 06/08 21:40
andy433268: 最後是根據我吐出的log關鍵字去執行第2個程式 06/08 21:49
smallyou1988: 看起來用一隻程式去做 :先執行A丟背景執行 然後就w 06/09 01:08
smallyou1988: ait. 再用if確認有檔案的話 在執行B不就好了?XD 06/09 01:08