nos*_*wah 8 command-line bash backup services systemd
我正在编写一个 bash 脚本来执行每日备份。这个脚本最终会在每天早上(cron 或 systemd)自动运行。
我想完成的是
我创建的 bash 脚本如下所示:
# Stop myservice
systemctl stop myservice.service
# Do all the backing up here...
# Start myservice
systemctl start myservice.service
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我运行这个脚本时,它在 systemctl stop/start 调用期间需要我的密码。如果这是自动运行,显然它不能每次都需要密码。如何在不需要此密码的情况下自动运行此脚本?
Ubuntu 18.04
谢谢!
您有多种可能性,具体取决于您的需求和偏好。
...将通过将整个脚本root添加到root's crontab(使用sudo crontab -e)来以用户身份运行整个脚本。当systemctl stop/start myservice.service运行时它不需要任何密码。缺点是您可能需要以其他用户身份运行备份任务(例如noslenkwah),并且必须切换到该其他用户进行备份。例子:
# Stop myservice
systemctl stop myservice.service
# Do all the backing up here...
# ... and run the backup_command as user "otheruser":
sudo -u noslenkwah /path/to/backup_command --with --some --options
# Start myservice
systemctl start myservice.service
Run Code Online (Sandbox Code Playgroud)
... 将systemctl命令添加到/etc/sudoers.d目录中的文件中,以便特定用户可以在不提供密码的情况下运行它们。
问题sudo visudo -f /etc/sudoers.d/noslenkwah
(文件名,noslenkwah无所谓,以受该文件中设置影响的“主”用户命名文件只是我个人的习惯。它只需要是目录下的文件即可/etc/sudoers.d。)
添加以下行并保存文件。
Cmnd_Alias MYSERVICE = \
/bin/systemctl stop myservice.service, \
/bin/systemctl start myservice.service
noslenkwah ALL = (root) NOPASSWD: MYSERVICE
Run Code Online (Sandbox Code Playgroud)这允许用户noslenkwah来运行sudo systemctl stop myservice.service,并sudo systemctl start myservice.service没有密码。它定义了一个所谓的命令别名(命令集合)命名MYSERVICE,然后允许
noslenkwahALL电脑上root MYSERVICE用实际的用户名和服务名称替换noslenkwah和myservice。请注意,您确实必须发出sudo systemctl start myservice.service此命令才能工作(不是sudo systemctl start myservice(.service例如,没有)。
不要关心“在ALL计算机上”的部分。仅当您打算将完全相同的sudoers文件分发到多台计算机时,这才是相关的。
然后,您将备份脚本更改为
# Stop myservice
sudo systemctl stop myservice.service
# Do all the backing up here...
/path/to/backup_command --with --some --options
# Start myservice
sudo systemctl start myservice.service
Run Code Online (Sandbox Code Playgroud)
并让它以用户身份运行noslenkwah。
| 归档时间: |
|
| 查看次数: |
14294 次 |
| 最近记录: |