3

cron を使用してスクリプトを実行する場合、内部で呼び出される実行可能ファイルにはフル パスが必要です。tc を呼び出そうとしたときに多くのエラーが表示されたときに、 wondershaperを実行しようとしていることがわかりました。だから私の質問は、この問題を克服する適切な方法は何ですか?

可能な解決策:

  • 実行可能フォルダーに cd し、そこにある他の呼び出された実行可能ファイルへのシンボリック リンクを準備します (動作するかどうかはわかりません - 移植性が低い)。
  • スクリプトでフルパスを使用します(機能します-異なるディストリビューション間での移植性が低い)
  • スクリプト内で必要なパスを含むパス変数をエクスポートする (機能するかどうかは不明)

ええと、誰でも助けてくれてありがとう。

4

4 に答える 4

4

linux/bsd/mac を使用している場合は、 のようにいくつかの環境変数を設定できPATHますcrontab。これで、通常は問題ありません。

あなたがSolarisを使っているなら、まあ、私はあなたのために祈っています. しかし、私にも答えがあります。私は通常、.profile何かを実行する前にソースを取得します。

0 0 * * 0 . /home/myuser/.profile && cd /path && ./script

気をつけて、私の.profile荷物.bash_profile.bashrc。ソースファイルに必要なものが含まれていることを確認してください。

于 2009-05-04T13:49:39.280 に答える
3

cronジョブ内で変数を宣言することは、より明確で保守が容易です。変更する必要があるのはcronジョブに含まれているため、別のシステムに移動する場合に複数のファイルを転送する必要はありません。

PATH=/usr/bin:/your/fancy/dir
MYAPPROOT=/var/lib/myapp

*/2 * * * * myappinpath
*/3 * * * * $MYAPPROOT/mylocalapp
于 2009-05-04T14:00:40.533 に答える
3

cron は login を実行しないため、.profile と /etc/profile はソースになりません。したがって、PATH は期待する値に設定されない場合があります。私はどちらかだろう

  • PATH を適切な値に設定してエクスポートする
  • スクリプトでフル パスを使用する

シンボリックリンクを使用したトリックは、. PATHにあり、見栄えがよくありません

于 2009-05-04T13:50:44.460 に答える
1

私のお勧め:

すべての変数を外部ファイルに設定します。/etc/process_name などにある「process_name.env」ファイルを使用します。バックアップ スクリプトがあるとします。次にあなた:

  • /etc/backup.env を作成し、「バックアップ」タスクを実行するために必要なすべての環境変数を配置します。
  • バックアップ スクリプトを変更し、次の行をShebangの後に追加します。

    . /etc/backup.env #バックアップ環境へのフルパスの前にドットとスペースがあります。

IMO このアプローチは、次の理由により、CRON 定義で変数を宣言するよりも優れています。

  • メンテナンスが簡単。ファイルを編集するだけです。
  • 構成/集中構成の切り替えが簡単:
    • さまざまな状況でスクリプトを使用するために複数の .env を持つことができます (たとえば、.env にバックアップの場所があるとします。.env の場所を引数として渡し、cron ジョブを毎日実行して、.env にいくつかの場所と別の .env を提供することにより、毎週異なる場所で、例にすぎません)。
  • SVN や Git などの VCS に .env ファイルを保持できます。
  • スクリプトのテストは非常に簡単です (CRON から実行する必要はありません)。

よろしく

于 2009-05-05T13:37:18.507 に答える