如何创建需要 SUDO 权限的 CRON 作业

如何创建需要 SUDO 权限的 CRON 作业

我在 Ubuntu 19.04 (Disco Dingo) 上。我已在 SUDOERS 中添加了我的常规用户帐户,并且仅在必须使用 root 时才使用。

现在,我创建了一个基本脚本来自动执行更新并释放一些空间。它看起来像:

#!/bin/bash

#LOGS = /home/rubaiat/updates.log
#logs are enabled by aliasing, see alias
echo -e "\n$(date "+%d-%m-%Y ---  %T") --- Starting \n" 

apt-get update
apt-get -y upgrade

apt-get -y autoremove
apt-get autoclean

echo -e "\n$(date "+%T") \t Script Terminated"

我已经启用X获得此权限并可以通过以下方式运行:

$ sudo ./sys-maintainer.sh 
[sudo] password for rubaiat:

我没有在脚本中添加 sudo,因为我需要以纯文本形式存储密码。

我创建了一个别名:

alias sys-maintainer='sudo ./sys-maintainer.sh >> updates.log 2>&1 && tail -7 updates.log'

现在我只需输入

$ sys-maintainer 
[sudo] password for rubaiat: 

..并运行我的脚本,同时将终端输出存储到一个简单的文本文件中。我的想法是,每当我需要时,就用 grep 查找这个文件,获取所需的信息。

现在,问题来了-

因为我不想手动调用这个脚本,所以我想把它放入 CRONTAB 中。但问题是,我无法将需要 SUDO 的作业指定到我的普通用户的 CRONTAB 中,因为该过程将暂停并要求输入密码。

我知道我可以从我的 root 帐户的 CRONTAB 执行此操作。但我不想这样做,除非这是唯一的选择。

那么,我该如何在普通用户的 CRONTAB 中添加脚本?请记住,执行原子命令需要 SUDO。

我知道我可能遗漏了一些标准/关键技术。如果有人能对这些问题提供一些见解,那将很有帮助。

注意:谢谢您阅读此文。我知道它有点长。另外,这是我在这里的第一篇帖子;所以希望我没有做任何不恰当的事情。

答案1

我创建了一个基本脚本来自动执行更新并释放一些空间。

你重新发明了无人值守升级服务。

但问题是,我无法将需要 SUDO 的作业指定到我的普通用户的 CRONTAB 中。

嗯,你可以——只需添加sudo到命令中。

但是,由于 cron 无法提示您输入密码,因此您需要指定这些命令为无密码通过/etc/sudoers。此行将允许 cron 执行sudo您的脚本:

rubaiat ALL=(root) NOPASSWD: /home/rubaiat/bin/sys-maintainer.sh

(注意:在 sudoers 中,最后一场比赛获胜。因此,请确保在 /etc/sudoers 的末尾添加此类例外,或者在任何情况下以下通用的“ALL=(ALL) ALL”行。)

相关内容