2011-09-17 19 views
0

在一個小的備份工具中,我試圖用system()寫入用戶cron表中的objective-c。Obj-C:system(「echo -e ...」)和cron無郵件

現在我這樣做:

NSString *croncmd = [NSString stringWithFormat:@"echo -e 'MAILTO=\"\" \n*/1 * * * * \"%@/Library/Application Support/LBKP/cron/croncall\" %@ > /dev/null 2>&1' | crontab" , NSHomeDirectory(), backup_id ]; 

system([croncmd UTF8String]); 

正如你所看到的,第一我只是試圖用> /dev/null 2>&1在錯誤的情況下襬脫了郵件的...但在OSX好像它不根本不工作,我仍然收到電子郵件。

然後在線閱讀一些信息我剛剛在cron表的開始處遇到了MAILTO=""的用法,放棄了所有的輸出。

的問題是,我要呼應「新線」的crontab文件女巫通常可以使用-e選項和\n焦炭在終端進行,但如果我從我的程序做,我在得到這個控制檯:

17/09/11 16:32:52,590 [0x0-0x3a03a].com.home.LBKP: "-":0: bad minute

什麼問題? :S我如何擺脫這個錯誤或只是輸出?

謝謝!

+1

首先,我建議你看看['NSTask'類參考](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSTask_Class /Reference/Reference.html)。 'system()'是邪惡的。 –

+0

嗨,我正在使用[與操作系統互動](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/OperatingSystem/OperatingSystem.html)從蘋果在另一個應用程序,但在這一個系統()即使邪惡是最快的方式去...無論如何感謝反饋。 – TCB13

回答

0

我才發現,原來問題是,當我加入的報價和其他的東西,使的NSString引起...無論如何,我發現,這樣做最安全的方式是:

NSString *disbl_mail = @"echo 'MAILTO=\"\"' | crontab"; // Disable all cron mail... 
system([disbl_mail UTF8String]); 

NSString *croncmd = [NSString stringWithFormat:@"(crontab -l; echo '*/1 * * * * \"%@/Library/Application Support/LBKP/cron/croncall\" %@ > /dev/null 2>&1') | crontab -" , NSHomeDirectory(), backup_id ]; 
system([croncmd UTF8String]); 

第二個命令語法(crontab -l; echo列出cron表中的可用信息,然後將其回顯並將新命令回顯給cron。這樣以前的MAILTO=""條目不會被刪除。

無論如何,特別是因爲我知道這不是添加東西到crontab的最佳方式我在這裏發佈一個新問題:Obj-C: What is the best way to add jobs to crontab?

希望這對我有用!