Linux crontab - どのシェルを使用していますか?

Linux crontab - どのシェルを使用していますか?

crontabでどのシェルを使用しているのか、どうすればわかりますか?

たとえば、出力をリダイレクトする場合は、&>または>&(bash対csh)を使用する必要があるかどうかを知ることができますか?

答え1

からcrontab(5)

いくつかの環境変数はcron(8)デーモンによって自動的に設定されます。 SHELL は /bin/sh に設定され、LOGNAME と HOME は crontab 所有者の /etc/passwd 行で設定されます。 HOME と SHELL は crontab の設定で無視できます。

答え2

これは、使用しているバージョンcronと設定方法によって異なりますが、通常はyesです/bin/sh。通常、他の項目へのシンボリックリンクですがls -l /bin/sh

次のcronエントリを追加できます。

* *    * * *    ps -p $$ > /tmp/shelltest

または(/etc/crontabを介して各ユーザーのcrontabにアイテムを追加する代わりに編集する場合crontab -e):

* *    * * *    username    ps -p $$ > /tmp/shelltest

/tmp/shelltest出力はシェルのファイル名を示します。cron出力がメールに送信されるように設定権限がある場合は、メール>/tmp/shelltestに情報をインポートすることをスキップして代わりにファイルに入れることができます。

次のように複雑です。

* *    * * *    ls -l /proc/`ps -p $$ | tail -n 1 | xargs | cut -f 1 -d \ `/exe > /tmp/shelltest

使用された正確なファイルを教えてください。一般的な Debian システムでは、次のような結果が出ます。

lrwxrwxrwx 1 dspillett dspillett 0 Mar 14 16:17 /proc/1356/exe -> /bin/dash

このインスタンスは、cronがデフォルトのdashシェルとして使用されることを示しています。

このコマンドを分析するには、次のようにします。

  • ps -p $$現在のプロセス(つまりps親プロセス)の詳細を印刷します。この場合はシェルになります。
  • tail -n 1ps含まれているヘッダー行を削除してください。
  • パイピングスルーは、行xargsの先行スペースを切り取るトリックです。
  • この呼び出しは、cut最初のフィールドから区切り文字が空白のフィールドを取得します(\とバックティックの間にスペースを含めることは絶対に重要です)。
  • バックティックで囲み、外部コマンドラインからの出力(プロセスIDでなければならない)を含めると、次のようになります。
  • ls -l /proc/9999/exeここで、「9999」は読み取られたプロセスIDで、プロセスの作成に使用されたファイルを一覧表示します。psこれは、/procファイルシステムに<pid>で識別されたプロセスの実行可能ファイルへの/proc/<pid>/exeリンクがあるためです。
  • (同じことをするよりきちんとした方法があるかもしれません。これは思い出から入力したものなので、コメントを通して提案を歓迎します!)

関連情報