我想验证特定用户是否可以使用 crontab。我想在 shell 脚本中使用此验证。
这样做的正确方法是什么?
答案1
VISUAL=true EDITOR=true crontab -e 2>/dev/null
此命令是静默的,但其退出状态指示您的脚本(以及运行它的用户)是否可以使用crontab
.
要测试另一个用户添加-u username
(如果您crontab
支持),但这只有在您的脚本有足够的特权可以代表其他用户-u
运行时才有效。crontab
非特权脚本将获得退出状态1
,就好像其他用户无法使用crontab
.或者使用sudo -u username …
(但sudo
可以或者可能不会允许您设置环境,具体取决于其配置)。
缺点:
- 您
crontab
可能支持也可能不支持-e
(POSIX 说它是可选的)。 - 该方法并不完全验证“用户可以使用
crontab
”,而是“脚本可以crontab
代表用户使用”。这可能是也可能不是您想要的。如果“特定用户”是指“运行脚本的用户”,那么您不需要,-u
并且该方法应该可以正常工作。
优势:
- 您不需要分析
/etc/cron.allow
and/etc/cron.deny
(如果使用的话,它们位于实现定义的目录中);您不需要构建任何逻辑来组成最终答案。crontab
它本身会为你做一切。
笔记:
- 在我的 Kubuntu 18.04.5 LTS之前
crontab
检查过,但是VISUAL
EDITOR
POSIX规范仅提及EDITOR
。这就是为什么这个答案设置了两个变量。 - 它可能看起来
crontab -l
更好,但如果 crontab 不存在,那么该命令将返回失败(至少这是它在我的 Kubuntu 中的行为方式)。 - 在我的 Kubuntu 18.04.5 LTS 中,如果 crontab 不存在,那么
VISUAL=true crontab -e
将会不是安装一个空的。我不确定其他实现。如果 crontab 不存在,安装空的 crontab 可能会产生副作用。