我是否正确理解了,不可能/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
。