crontabでシェルを実行すると、他のシェルプログラム呼び出しが失敗します。

crontabでシェルを実行すると、他のシェルプログラム呼び出しが失敗します。

私は次のように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にリダイレクトされます。ところで、スケジューリングを行ったら、確認のためにrun.shにechoステートメントをいくつか入れてcrontabが正常に実行されるのですが、main.sh実行権限を付与してもなぜrun.shがmain.shにリダイレクトできないのかわかりません。

どんなアイデアがありますか?

更新:問題を発見しましたが、なぜそのようなことが起こったのかわかりません。 run.sh では #!/bin/bash を書きましたが、main.sh では run.sh の #!/bin/bash を #!/usr に変更してから #!/usr/bin/env bash を書きました。 /bin/env bash 操作が開始されました。なぜこれが起こるのですか?それらの違いは何ですか?

答え1

-line #!inはと同じ実行環境で実行するmain.shため、まったく問題ありません。sourcerun.sh

質問で尋ねるように、あなたにはrun.sh-lineはまったくありません。#!読むべきコメントがあります。

#/bin/bash

最初の行に。

これは実行されることを意味します/bin/sh。シェルにはコマンドが/bin/shないためsource、cronがスクリプトを実行すると、スクリプトで「コマンドが見つかりません」というエラーが発生する必要があります(ルート電子メールの確認)。

関連:

関連情報