【问题标题】:Crontab won't run sed shellCrontab 不会运行 sed shell
【发布时间】:2016-03-02 11:14:48
【问题描述】:

我有一个 cron 作业来运行一个名为 sedcmd.sh 的 sed shell 来预处理一些 json 数据。当我在正确的目录中时,我使用

手动运行它
. ./sedcmd.sh 

而且它有效。外壳本身工作正常。 作为参考,里面的命令之一看起来像

sed -i '/^\s*$/d' /home/school/Desktop/Programs/rawjsondata.txt

我的 cronjob 看起来像

5 * * * * . ./home/school/Desktop/Programs/sedcmd.sh 

我收到错误“未找到此类文件或目录”。我究竟做错了什么。我已经对任何随机拼写错误进行了三次检查。即使我给出了整个文件路径,我似乎也无法从任何其他目录运行 sedcmd.sh,所以它肯定是我做错了。我对解决方案的想法是

  1. 我应该将 sedcmd.sh 添加到我的 $PATH 或 bashrc 中,这样我就可以从任何地方调用它。我不知道该怎么做。 或者
  2. 弄清楚如何从 crontab 中正确调用它。我也不知道该怎么做。

【问题讨论】:

  • 如果将 contrab 条目更改为 5 * * * * /home/school/Desktop/Programs/sedcmd.sh(不带点)怎么办?
  • 修复了它。为什么呢?我认为这些点是调用 shell 所必需的。
  • 仅当您调用的是同一目录中的文件时。看看here
  • @JoaoMorais :您的建议是正确的,但您的理由是错误的。呼叫. /path/to/scriptdir/sedcmd.shsource /path/to/scriptdir/sedcmd.sh 的别名。 source. 在当前环境和任何 env 中运行指定的脚本。 sedcmd.sh(在这种情况下)中设置的变量现在可用于当前的 shell 进程。如果 env cmds 类似于 export var=value,则 $var 被导出到主进程的所有子 shell。 (但不是父母,好像经常希望的那样)。祝大家好运。
  • @Sam :总而言之,一般做法是在顶部的源脚本中设置项目特定变量,使用 . /path/to/scriptToSourcesource /path/to/scriptToSource 。通常避免使用像source ./scriptToSource 这样的用法,因为脚本必须存在于进程的当前目录中。从 crontab 执行的脚本(如 ./script)很可能位于 crontab 条目所有者的 $HOME 目录中。所以你不能依赖它。祝你好运!

标签: shell sed crontab


【解决方案1】:

当您从终端运行脚本时,您可以: ./script_name.sh 但是要从 crontab 执行相同的脚本,您需要执行类似 5 * * * * /path/to/script/script_name.sh

的操作

由于 Sam 从 cmets 得到了这个答案,所以将答案发布为社区 wiki。

【讨论】:

    猜你喜欢
    • 2020-10-19
    • 2015-06-05
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2011-01-14
    • 2020-09-10
    • 2013-03-07
    • 2020-02-02
    相关资源
    最近更新 更多