我希望每次启动计算机时都会运行终端命令,但我想要运行的命令需要 root 权限。我在设置的启动应用程序部分的命令中输入了 sudo ,但由于它需要我的密码,所以我认为它没有运行。
答案1
将 cron 作业添加到 root 的 cron 表中。 Cron 作业是按计划运行的任务。您可以安排作业在每次系统启动时运行。
作为root
,输入crontab -e
(或使用sudo crontab -e
)编辑 cron 表,它只是计划任务的列表。然后使用@reboot
昵称(而不是正常计时语法)创建一个在每次启动时运行的作业:
@reboot your_command
答案2
您可以配置 sudo 以允许您运行该命令没有输入您的密码。我通常会建议不要这样做,但话又说回来,我建议根本不要自动运行 root 应用程序(除非它们是 setuid root 并正确管理权限/安全),嘿,这是你的机器。如果您需要在每次登录时运行 sudo 命令,则此技术特别有用。 (如果只在启动时需要启动定时任务,那么它是有意义的,我同意)。
您可以通过以下两种方式之一执行此操作:
- 在 sudo 配置文件中添加适当的条目
/etc/sudoers
,该文件通过visudo
以 root 身份运行(或通过 sudo)进行编辑。 - (受到推崇的)创建一个
/etc/sudoers.d
包含您的配置更改的文件。该文件应在底部/etc/sudoers
包含指令,这将导致它读取此目录中的文件作为附加配置。#includedir /etc/sudoers.d
(如果没有,这个选项 #2 将不起作用。)
不管怎样,现有的/etc/sudoers
都有配置语法的解释,但它有点长,你不需要太担心任何现有的配置。 (还有一个手册页,man 5 sudoers
。)
您需要做的是编写一个用户规范行,允许您在不输入密码的情况下运行特定命令。
正如文件注释所指出的,用户规范具有以下基本格式:
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
还有一些特定类型配置的语法示例。为了完成您的需要,用户规范是:
username ALL = NOPASSWD: /path/to/command
(用适当的值替换“用户名”和“/path/to/command”;“ALL”和“NOPASSWD”是文字。)
请注意,您应该始终使用满的命令的路径,两个都在 sudoers 配置中以及自动启动时。这有助于确保程序按照您期望的方式运行,而不是由于劫持而被其他(可能是恶意的)程序取代$PATH
。该建议也适用于 root crontab 条目或自动授予 root 权限的任何其他方法。