condor執行有多種模式,不同的模式有各自不同的功能。
在standard模式下,condor提供檢查點和遠端系統呼叫。這些特性使得任務的執行更加可靠並且允許任務從機群中的任何地點以相同方式訪問資源。要把乙個程式配置成標準模式任務,就必須使用condor_compile進行重連線。大多數程式都能配置成標準模式任務。
乙個檢查點映像本質上就是任務當前執行狀態的一幅快照。如果某件任務必須從一台機器遷移到另一台上面,condor就會建立乙個檢查點映像,然後把這個映像拷貝到新機器上,隨後從剛才中斷的位置重新啟動這個任務。如果一台機器在它正在執行某項任務的時候出現崩潰或故障,condor能夠採用最近期的乙份檢查點映像在某台新機器上重新啟動這項任務。這樣一來,任務就可以經年累月的執行而不用擔心突發性的計算機故障。
要想獲得檢查點功能,必須用condor_compile把源程式與condor庫進行鏈結。
設立檢查點有2種方式:
1,在程式執行期間傳送訊號,使condor做檢查點,需要人為控制。若希望程序進行一次檢查點操作後中止執行,使用者鍵入ctrl+z;若希望程序進行一次檢查點操作後程序繼續執行,鍵入ctrl+c。
2,在源程式中呼叫condor檢查點函式庫,程式自動做檢查點。
利用檢查點檔案恢復被中斷的程序,鍵入命令:
《程式名》 -_condor_restart 《檢查點檔名》
condor檢查點庫:
① void init_image_with_file_name(char *ckpt_file_name) 設定檢查點映像檔名。
② void init_image_with_file_descriptor(int fd) 設定檔案描述符名。
③ void ckpt() 進行一次檢查點操作並存入檢查點檔案,之後程式繼續執行
④ ckpt_and_exit() 進行一次檢查點並存入硬碟,之後中止程式執行
⑤ void restart() 讀取檢查點映像檔案,恢復到最近檢查點時刻的狀態開始執行。
⑥ _condor_ckpt_disable() 使檢查點功能臨時失效
⑦ void _condor_ckpt_enable() 必須在_condor_ckpt_disable呼叫之後呼叫,用於恢復檢查點操作
⑧ int condor_warning_config(const char *kind,const char *mode) 配置由condor提供的警告提示中哪些是可見的。
⑨ extern int condor_copress_ckpt 檢查點映像記錄是否壓縮的標誌,0為不可壓縮,1為記錄壓縮儲存。
下面以第2種設立檢查點的方法為例:
test_1.c
#include
#include
extern void ckpt_and_exit();
extern init_image_with_file_name(char *);
extern void ckpt();
extern void ckpt_and_exit();
int main()
{ init_image_with_file_name("test_1.ckpt");
int a=1;
int i=0;
while(a==1)
printf("test%d!\n",i++);
sleep(1);
if((i%10)==0) ckpt_and_exit();
return 1;
每輸出10個test後做1次checkpoint,然後程式退出。
1)
[root@node1 program]# condor_compile gcc -o -o test test.c
[root@node1 program]# setarch i386 -r -l ./test //產生test_1.ckpt檔案
[root@node1 program]# setarch i386 -r -l ./test -_condor_restart test_1.ckpt
MySQL中CHECK約束無效
今天才知道在mysql中check約束是無效的,例如下面一段 在建立表table1時新增了check約束,要求field1欄位的值大於零,隨後向field1欄位插入 1,這明顯違反check約束,但這段 在mysql中卻可以執行成功。create table table1 field1 int,ch...
DDL中的check約束學習
1.check的作用是 定義每一行必須滿足的條件。2.check約束可以有以下六種 not null 非空約束 unique 唯一約束 primary key 主鍵約束 foreign key 外來鍵約束 check 檢查約束 default 預設約束。3.check使用注意事項 不可以對以下表示式...
oracle中CHECK 約束的使用
check 約束用於限制列中的值的範圍。如果對單個列定義 check 約束,那麼該列只允許特定的值。如果對乙個表定義 check 約束,那麼此約束會基於行中其他列的值在特定的列中對值進行限制。create table 時的 sql check 約束 create table persons p id...