如何像从 cron 调用一样运行命令

如何像从 cron 调用一样运行命令

我编写了一个脚本并将其设置为 cron 作业。但由于环境变量的差异,它无法正常工作。

在这种情况下,我稍微改变一下crontab -e并设置一个最接近分钟的 cron 作业时间,然后等待下一分钟来显示结果。我觉得这是一种完全荒谬的方法,但我不知道更好的方法。

如果有一种方法可以像在 cron 作业中调用一样运行脚本,我将使用它。

有谁知道该怎么做?

答案1

以下是相反的方法:强制 cron 执行使用您的登录环境:

bash -lc "your_command"

来自 bash 手册:

-c string     If the -c option is present, then commands are read from string.
              If there are arguments after the string, they are assigned to the
               positional parameters, starting with $0.
-l            Make bash act as if it had been invoked as a login shell
               (see INVOCATION below).

召唤(有点剥离):

当 bash 作为交互式登录 shell 或带有 --login 选项的非交互式 shell 被调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的文件中读取并执行命令。启动 shell 时可以使用 --noprofile 选项来禁止此行为。

想了解更多:

答案2

另一种方法是:

/usr/bin/env --忽略环境你的命令

从手册页env

-i, --ignore-environment

从空环境开始

答案3

更好的方法是使用at.

这里有些例子

 echo $PWD/script.sh | at now

或者

 echo "reboot" | at 5:00

或者

 echo "mail -s test user@host" | at now + 1 hour

这是一些日期/时间例子

相关内容