从特定用户运行 /etc/cron.daily

从特定用户运行 /etc/cron.daily

我是否正确理解了,不可能/etc/cron.daily/my从任意用户运行,而只能从root根据运行/etc/crontab

我可以在我的 cron 脚本中将 root 权限授予特定用户吗?

最好将 cron job 放入/etc/cron.d? 例如:

$ cat /etc/cron.d/my
5 0 * * *  user  test -x /usr/bin/my && /usr/bin/my -cfg /etc/my.cfg

答案1

你是对的,(以及每周/每月等)中的作业/etc/cron.daily总是以用户身份执行root,但你可以简单地从脚本中切换用户并以其他用户的身份再次调用该脚本,包括所有提供的参数(尽管作业中不会有任何参数cron.daily):

文件/etc/cron.daily/my

#!/bin/sh

# If started as root, then re-start as user "gavenkoa":
if [ "$(id -u)" -eq 0 ]; then
    exec sudo -H -u gavenkoa $0 "$@"
    echo "This is never reached.";
fi

echo "This runs as user $(id -un)";
# prints "gavenkoa"

exit 0;

当脚本以用户身份启动时,root它将检测到并重新执行本身通过sudo -H -u gavenkoa,即:以用户 身份gavenkoa。这不需要特殊输入,/etc/sudoers 因为root始终允许切换到任何用户。

exec 取代当前进程将使用新sudo …调用,并且永远不会返回。这就是为什么您不需要子句的原因else

相关内容