我编写了一个脚本并将其设置为 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
这是一些日期/时间例子