由 crontab 运行时 shell 调用另一个 shell 程序失败

由 crontab 运行时 shell 调用另一个 shell 程序失败

我计划像这样运行 run.sh 程序:

16 09 07 * * root /opt/db_maintain/run.sh > /opt/db_maintain/temp-log

这是 run.sh:

#/bin/bash
#********* Saman *********
TM=$(date --date='40 days ago' '+%F %T')
TARGET=/opt/db_maintain/main.sh
source $TARGET "$TM"

我还授予了以下文件的执行权限:run.sh main.sh

当我手动运行该程序时,它从 run.sh 重定向到 main.sh ,没有任何问题。然而,在安排它之后,crontab 成功运行,因为我在 run.sh 中放置了一些 echo 语句来检查它,但我不知道为什么 run.sh 无法重定向到 main.sh,即使我给予 main.sh 执行权限。

你有什么主意吗?

更新:我发现了问题,但我不知道为什么会这样。在run.sh中我写的是#!/bin/bash,但是在main.sh中,我将run.sh中的#!/bin/bash更改为#!/usr后,我写的是#!/usr/bin/env bash /bin/env bash,它开始工作。为什么会发生这种情况?它们之间有什么区别?

答案1

-line #!inmain.sh根本不重要,因为您用来source在与 相同的执行环境中运行它run.sh

正如问题中所提出的,您的根本run.sh没有 -line 。#!它有一个评论阅读

#/bin/bash

作为它的第一行。

这应该意味着它将由 执行/bin/sh。 shell/bin/sh没有source命令,因此当 cron 运行脚本时,您应该从脚本中收到某种“命令未找到”错误(检查 root 的电子邮件)。

有关的:

相关内容