我在 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”行。)