目前,我試圖做這樣的事情:製作cron作業等到另一個作業完成
- 1 cron作業backup_daily
- 2 cron作業backup_weekly
- 3 cron作業backup_monthly
因此,可能發生的情況是,例如每天和每週將在同一天運行。至少其中一個將會失敗,因爲應備份的文件被另一個備份進程鎖定。所以,一個簡單的解決方案就是在不同的時間運行這些工作。但是由於我們不能說無所事事需要多長時間,這有點難看。
所以,我在想是一個代理腳本,所以不是做好上面的cron作業我會做類似
- 1 cron作業check_if_anybackup_is_running_and_run_backup_daily_else_wait_till_finished
- 2 cron作業check_if_anybackup_is_running_and_run_backup_weekly_else_wait_till_finished
- 3的cron job check_if_anybackup_is_running_and_run_backup_monthly_else_wait_till_finished
那麼我唯一會關心的是他們從任何時間的偏移開始,所以他們不會彼此阻塞。也應該明智地選擇「等待」時間,以便他們不會在同一時間再次「重新檢查」並阻止彼此(有3個過程,我們可以每週使用+1偏移量進行處理,+ 2個處理每月和偶數/不均勻計數器重新檢查時間)
但是,我不知道如何實現這與一個Linux腳本。我不確定什麼是「正確」的程序。使用在進程啓動時創建的鎖文件並檢查?如果它被鎖定會發生什麼?在X時間之後再次檢查鎖文件是否是一種「好」的方法?我不確定當我在Linux線程上使用睡眠時會發生什麼 - 我的意思是:「計數器」是預定的並使用了處理器電源,還是有一些中斷,處理器將在一段時間後發送給進程X(如「基於事件」?) 有沒有更好的方法可以想到?一些Linux腳本代碼片段將是完美的,因爲那不是我以前做過的事情
最常見方式是使用鎖定文件。如果它存在紓困(或等待並再試一次),更智能的變體確實存在。 「睡在Linux線程上」:你是什麼意思?睡眠(3)不花費(cpu)資源,該進程在睡眠系統調用中被阻塞,直到被喚醒或中斷。 – wildplasser
是的,這就是我的意思。問題是如果它像一個真正的睡眠,進程處於非活動狀態並被CPU喚醒,或者進程啓動了一個計數器,那麼進程(計數器)確實需要cpu能力。很高興知道它不是那樣。你可能有任何片段或鏈接到好的bash腳本教程? – masi