我正在编写一个bash脚本来执行每日备份。该脚本最终将每天早上自动运行(cron或systemd)。
我想完成的是
我创建的bash脚本如下所示:
# Stop myservice
systemctl stop myservice.service
# Do all the backing up here...
# Start myservice
systemctl start myservice.service
我遇到的问题是,当我运行此脚本时,在systemctl停止/启动调用期间需要输入密码。如果要自动运行,显然不需要每次都输入密码。如何自动运行此脚本而不需要此密码?
Ubuntu 18.04
谢谢!
根据您的需求和喜好,您有多种可能。
…可以通过将整个脚本root
添加到root
的脚本中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
…将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
这允许用户noslenkwah
来运行sudo systemctl stop myservice.service
,并sudo systemctl start myservice.service
没有密码。它定义了一个名为的命令别名(命令集合)MYSERVICE
,然后允许
noslenkwah
ALL
电脑上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
并以用户身份运行noslenkwah
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句