我有一个下面的命令,每次Ubuntu
机器启动或重新启动时我都必须手动运行。
ngrok start --all
此命令只能在没有sudo
. 如果我运行它sudo ngrok start --all
,它会给出错误。因此,我无法创建可以作为systemd
服务运行的脚本,因此该服务会在每次启动时自动启动并执行脚本并启动命令。
我也尝试crontab
过添加以下行,sudo crontab -e
但它也没有奏效。
@reboot ngrok start --all
如何在不sudo
启动 Ubuntu 的情况下运行上述命令。任何人都可以请帮忙。谢谢
那时它已经以 root 权限运行,所以不需要使用
sudo
. 没有它就运行它。您仅
sudo
在登录时需要,并且程序使用您的用户帐户以较少的权限运行;sudo
赋予这样的程序root权限。在系统启动期间或在(root 的)crontab 中启动的进程已经以 root 身份运行。甚至还有一个解决方案如何将其作为 systemd 单元运行:
https://github.com/vincenthsu/systemd-ngrok
使用
@reboot
在你crontab
的方法是要走的路,但是你应该知道一些关于工作的事情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
),然后调用所需的程序。