“cron”使用的“-p”是什么?

“cron”使用的“-p”是什么?

cron 的联机帮助页(亲信)

-p     Allows Cron to accept any user set crontables.

我了解到cron守护进程将隐式搜索并运行/etc/crontab/etc/cron.d/*和中定义的 cron 作业/var/spool/cron/cronstabs/*

有何-p用途?

是否明确告诉cron搜索并运行 crontab 文件中定义的 cron 作业,该文件存储在除上述之外的其他位置?

或者是为了复制将 crontab 文件存储在上述位置以外的其他位置到上述位置之一?

Debian 或其衍生版本上的 cron 是否有-p选项?我在Ubuntu-p的联机帮助页上没有找到。cron

谢谢。

答案1

CAVEATS亲信手册页的部分说cron(8)(强调我的):

所有 crontab 文件都必须是常规文件或常规文件的符号链接,除了所有者之外,其他任何人都不能执行或写入它们。 可以使用 -p 选项覆盖此要求 在 crond 命令行上。

所以事实上记录在手册页上,尽管不是在最明显的位置。

答案2

好问题。它似乎没有记录在手册页中。查看源代码,我们看到-p设置了 PermitAnyCrontab,请参阅https://github.com/cronie-crond/cronie/blob/master/src/cron.c#L703

        case 'p':
            PermitAnyCrontab = 1;

依次被使用https://github.com/cronie-crond/cronie/blob/40b7164227a17058afb4f3d837ebb3263943e2e6/src/database.c#L89

对 crontab 文件的状态不cron那么挑剔(可以是非常规文件,可以有不同的所有者,可以有不是 400 的模式,可以有 1 以外的链接计数)。

if (PermitAnyCrontab == 0) {
    if (!S_ISREG(statbuf.st_mode)) {
        log_it(uname, pid, "NOT REGULAR", tabname, 0);
        close(crontab_fd);
        return (-1);
    }
    if ((statbuf.st_mode & 07533) != 0400) {
        log_it(uname, pid, "BAD FILE MODE", tabname, 0);
        close(crontab_fd);
        return (-1);
    }
    if (statbuf.st_uid != ROOT_UID && (pw == NULL ||
            statbuf.st_uid != pw->pw_uid ||
            strcmp(uname, pw->pw_name) != 0)) {
        log_it(uname, pid, "WRONG FILE OWNER", tabname, 0);
        close(crontab_fd);
        return (-1);
    }
    if (pw && statbuf.st_nlink != 1) {
        log_it(uname, pid, "BAD LINK COUNT", tabname, 0);
        close(crontab_fd);
        return (-1);
    }
}

虽然它明显存在于 cronie 中,但 Vixie Cron 中不存在这样的功能(https://github.com/svagner/vixie-cron

相关内容