アクセラと+αな生活
アクセラとα350と共に過ごす気まぐれ日記です。
Firefox ブラウザ無料ダウンロード
2017年09月
≪08月  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30    10月≫
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
今まで正常に動いていたシェルが cron から実行すると動かなくなることがあります。
これは、通常のシェルの実行環境と cron から実行される環境が違うのが原因です。

今回、cronから実行した時に pidof が動かず、対応はすぐにできたのですけど、備忘録として残しておきます。

対象のシェルに実行権限(+x)がついていないというオチじゃないので、ご安心をww
(ちなみに、実行権限の付与は「chmod +x <実行ファイル>」でできます)


【実行ディレクトリ】
cron は対象のシェルをサブシェルとして、対象ユーザのホームディレクトリで実行します。

ホームディレクトリで実行されるため、もともとのシェルが保存されている場所とは変わってしまいます。

ファイル名(読み込んだり、書き込んだりするファイル、ライブラリとしてインクルードされるファイル)などがフルパスで記述されていない場合、場所が変わることでエラー(file not found)になる可能性があります。
シェルでファイル名を記述する場合は、実行環境に依存しないようにできるだけフルパスで記述するようにしましょう。

【環境変数の引継ぎ】
引き継がれる環境変数は
  ○HOME (例:/home/hoge)
  ○LOGNAME (例:hogehoge)
  ○SHELL(=/usr/bin/sh)
  ○PATH(=/usr/bin)

となります。

ここで気をつけなければならないのは、「/usr/bin」(一般ユーザのコマンドディレクトリ)しか引き継がれないことです。
つまり、root ユーザで実行しても、「/sbin」(管理者ユーザのコマンドディレクトリ)は引き継がれません。
システムコマンド等(「/sbin」配下のコマンド)をシェルで実行する場合は、フルパスで記述しておかないとエラー(command not found)になってしまいます。

普段から、システムコマンドはフルパスでシェルに記述するようにしましょう。

なお、システムコマンドであるかは、「whereis」(対象コマンドの場所を表示)で調べることができます。
# whereis pidof
pidof: /sbin/pidof /usr/share/man/man8/pidof.8.gz


上の場合、「sbin/pidof」となっているため、システムコマンド(/sbin)であることが分かりますね。
システムコマンドなので、cron から実行するシェルに記述する場合は、「sbin/pidof」とフルパスで記述する必要があります。


コメント
この記事へのコメント
URL :
コメント :
パスワード :
管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
Template designed by アクセラと+αな生活

Powered by .
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。