私は次のように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
ため、まったく問題ありません。source
run.sh
質問で尋ねるように、あなたにはrun.sh
-lineはまったくありません。#!
読むべきコメントがあります。
#/bin/bash
最初の行に。
これは実行されることを意味します/bin/sh
。シェルにはコマンドが/bin/sh
ないためsource
、cronがスクリプトを実行すると、スクリプトで「コマンドが見つかりません」というエラーが発生する必要があります(ルート電子メールの確認)。
関連: