我计划像这样运行 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 的电子邮件)。
有关的: