Obj-C:系统(“echo -e ...”)和没有邮件的cron

时间:2011-09-17 15:49:11

标签: objective-c system crontab

在一个小型备份实用程序中,我正在尝试使用system()写入objective-c中的用户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 个答案:

答案 0 :(得分: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?

希望这对我有用!