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

gav*_*koa 11 cron anacron

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

我可以在我的 cron 脚本中删除特定用户的 root 权限吗?

最好将 cron 作业放入/etc/cron.d? 喜欢:

$ cat /etc/cron.d/my
5 0 * * *  user  test -x /usr/bin/my && /usr/bin/my -cfg /etc/my.cfg
Run Code Online (Sandbox Code Playgroud)

Per*_*uck 17

你是对的,工作在 /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;
Run Code Online (Sandbox Code Playgroud)

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

exec 替换用新的当前进程sudo …调用并永远不会返回。这就是为什么你不需要else子句。

  • @gavenkoa 我们在谈论 Ubuntu,不是吗?始终安装了 `sudo`。但是如果你更喜欢 `su`,你当然可以用 `su` 替换 `sudo` 调用,但要注意将参数 `"$@"` 传递给 `su` 会更复杂,请参阅 [Pass arguments to由另一个用户运行的命令](https://unix.stackexchange.com/q/156343/251553) 在 U&L 上。 (2认同)