【问题标题】:Schedule crontab job with input parameters to script将带有输入参数的 crontab 作业调度到脚本
【发布时间】:2021-05-17 14:34:51
【问题描述】:

我正在尝试使用 crontab 安排某个 bash 脚本。该脚本采用两个输入参数。当我通过 shell 手动执行文件时,它运行良好,之后我可以看到该进程正在运行。但是,通过 crontab 安排作业不起作用。我将输出重定向到一个日志文件,并且在调度时间到来时确实会创建该文件,但它是空的。另一方面,该进程未启动。

这是我的 crontab 行:

20 10 * * * /home/user/path/scripts/startprocess.sh 8003 prod >> /home/user/logs/crontabtest.log 2>&1

脚本如下所示:

#!/bin/bash
PORT=$1
export STAGE=$2
nohup q /home/user/repo/load.q -p $PORT > /home/user/logs/q_${PORT}.log 2>&1 &

非常感谢

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    去掉nohup -q&,这些是后台运行的进程,contrab已经在后台运行了。

    【讨论】:

    • 我最后删除了 nohup 和 &。现在,我收到了q command not found,但在 shell 中我可以毫无问题地使用此命令
    • q 不是 bash 中的标准命令。如果 q 是工具或脚本,请尝试将完整路径添加到 q,例如 /usr/local/bin/q。要获取 q 的完整路径,请运行 whereis q.
    • @SanMu cron 作业在非常小的环境下运行,包括默认的 PATH 仅为 /usr/bin:/bin,因此它不会在这两个目录之外找到命令(除非您指定完整路径)。如果您的程序/脚本/任何其他环境依赖项,这些也可能会丢失,您必须将它们添加到 crontab 或包装脚本中。
    【解决方案2】:

    确保脚本具有可执行权限,默认情况下也使用 root 用户,如果您想使用其他用户,请在 cronjob 命令中指定用户。

    使用 crontab 时不需要nohup

    环境变量可能在 crontab 中不可用,因此请在脚本中添加您需要的环境变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 2014-07-04
      • 2014-05-07
      • 2023-03-22
      • 1970-01-01
      • 2020-01-19
      • 2020-02-26
      相关资源
      最近更新 更多