Ubuntu 16.10 中使用 sudo 的启动脚本

Ubuntu 16.10 中使用 sudo 的启动脚本

我需要在/usr/bin启动时使用 sudo/root 权限启动一个脚本和一个二进制文件。我尝试了论坛上的许多指南,但都不起作用(rc.localsystemd风格,Upstart)——也许我做错了什么。我的操作系统是 Ubuntu GNOME 16.10。

脚本大概是这样的

#!/bin/bash
sudo ./usr/bin/myprogram
sudo bash /home/USER/script.bash

脚本和程序都是可执行的。我只是不知道在启动时使用 sudo 启动它们的最佳方法。

请温柔一点。我是新用户。

答案1

对于不需要 GUI 的命令行应用程序,只需将其调用放入 即可/etc/rc.local,它已以 root 身份运行,因此不需要sudo。下面是我自己的示例/etc/rc.local,我使用它来启动两个监视脚本。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/xieerqi/bin/batmon.sh &
/home/xieerqi/bin/sh/temperature.sh  &
 exit 0

对于 GUI 应用程序,您需要采取不同的方法。您需要打开启动应用程序应用程序,然后添加以下命令:

bash -c "sleep 10;gksu /usr/bin/my_vpn_program"

这样做的目的是给 GUI 足够的时间启动,10 秒,然后会弹出密码对话框,如果您正确输入密码,则会启动您的命令。实际上这是一个迷你 bash 脚本。您可以改用pkexec,有些人甚至会说pkexec推荐使用 而不是gksu

或者,如果您不想每次都输入密码,您可以允许您的用户以 root 权限运行此特定命令而无需身份验证。为此,您需要编辑/etc/sudoers文件。警告:建议您使用sudo visudo从终端编辑文件。下面是我如何使用相同设置和pm-suspend命令的示例:

# Allow using pm-suspend for my user without password
my_username_here ALL = NOPASSWD: /usr/sbin/pm-suspend

此行应附加到文件末尾/etc/sudoers并保存。请注意,您仍需要将sudo或附加gksu到您设置的每个命令的开头。因此,您需要使用bash我之前显示的相同命令。

答案2

解决方案非常简单,您错过了它。:) 因为 rc.local 由 root 运行,所以文件中的 sudo 完全没有必要。

换句话说,按照你的建议将其放入 rc.local 中,但从sudo脚本中省略 。它们完全没有必要,因为 rc.local 已经以 root 身份运行。

希望这可以帮助!

答案3

使用crontab选项让脚本在重启后运行,

@reboot您可以通过添加代码来实现计划任务

以root用户打开crontab:

$ sudo crontab -e

在底部添加下一条记录:

@reboot /usr/bin/myprogram

那将会实现你想要的效果。

相关内容