在/etc/systemd/system目录下自动创建file.service

在/etc/systemd/system目录下自动创建file.service

我如何在 Linux 中将 jar 作为服务运行,所有指南都表明您需要在 /etc/systemd/system 文件夹中创建一个 file.service,我想编写一个带有命令的脚本来创建该文件但是每个命令我尝试要求使用 SUDO 并输入密码,我想绕过输入密码,并且脚本中的所有内容都是自动的有人可以帮忙吗?

我尝试在另一个文件夹中创建文件并使用 cp 命令复制,但仍然必须插入密码。我尝试了命令 echo "XXX" > "/etc/stsyemd/system/filename.service" 但权限被拒绝。

答案1

您通常不能在脚本中“绕过输入密码” sudo (您当然可以编辑 的配置sudo,但是,正如您所期望的,需要您首先使用sudo)。这就是用户分离的意义所在。

所以,你想要的东西是不可能的。如果一个人可以编写一个无需身份验证即可成为 root 的脚本,那么让用户无法执行 root 可以执行的所有破坏性操作是没有意义的。

并且脚本中的一切都是自动的

此类安装脚本可以合理地假设它们是由 root 运行的,因此您的脚本本身不必处理该问题,而是可以运行sudo(作为一个整体,而不是内部)。

除此之外,“我想运行一个 jar”可能建议您根本不应该尝试在 /etc/systemd/system 中安装服务 - 而是仅针对当前用户的用户服务安装到 ~/.config/ 中systemd/user,您根本不需要任何特殊权限 - 因此无法访问 root 权限,也没有sudo.

答案2

绕过 sudo 中的密码很简单。

  1. 添加行
youruser_ID ALL=(ALL) NOPASSWD:ALL

到 sudoers 文件(使用 visudo)。再也不用输入密码了!

或者 2) 添加行

Defaults timestamp_timeout=60

Defaults env_reset在 sudoers 文件中的下面。现在,您可以这样做sudo id,它会要求您输入密码,但在剩下的时间里,您可以sudo不使用密码。

但一般来说,安装文件的脚本/etc/systemd/system应该以 root 身份运行。所以

sudo install_script

将是一个更好的选择。

相关内容