如何在 Ubuntu 启动时不使用 sudo 运行命令

如何在 Ubuntu 启动时不使用 sudo 运行命令

我有以下命令,每次机器Ubuntu启动或重新启动时都必须手动运行该命令。

ngrok start --all

此命令只能在没有 的情况下运行sudo。如果我将其作为 运行sudo ngrok start --all,则会出现错误。因此,我无法创建可以作为systemd服务运行的脚本,以便服务在每次启动时自动启动并执行脚本,然后命令启动。

我也尝试过crontab添加下面的行sudo crontab -e但是也没有用。

@reboot ngrok start --all

如何在不sudo启动 Ubuntu 的情况下运行上述命令。有人能帮忙吗?谢谢

答案1

这时候已经以root权限运行了,就不需要用了sudo,直接运行就可以了。

sudo当您登录后,程序使用您的用户帐户以较低的权限运行;sudo赋予此类程序 root 权限。在系统启动期间或在 (root 的) crontab 中启动的进程已作为 root 运行。

甚至还有一个解决方案如何将其作为 systemd 单元运行:

https://github.com/vincenthsu/systemd-ngrok

答案2

使用@rebootcrontab可行的方法,但是您应该了解有关运行的作业的一些信息cron

通过cron、 或at或运行的作业batch不会在桌面上的同一运行时环境中运行。您的任何PATH更改或其他环境变量设置都不会自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(阅读man xhost)。

cron人们可以在crontab文件 Read中为所有作业设置环境变量man 5 crontab

echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

由于command该行的一部分crontab默认由 解释/bin/sh,其语法比 更简单/bin/bash,因此我建议command调用一个bash脚本(可执行、已安装、以 开头#!/bin/bash)来设置环境,然后调用所需的程序。

相关内容