Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

シェルが3重起動する

クーロンを使って毎日自動でシェルを起動させていますが、3重で起動していました。
原因がつかめておらずご助力頂ければと思います。

Red Hat Enterprise Linux 8.4

<シェル>
シェル配置場所:/etc/cron.daily
シェルの内容:指定のフォルダに日付フォルダを作成する

<クーロン>(下記コマンドを使って手入力しています)
crontab -u root -e
33 00 * * * sh <シェルの場所>/<シェル名称> >> <ログの場所>/<ログ名称> 2>&1

<ログ>(下記のようにログが2行出ていることから3重起動と判断しています)
mkdir: ディレクトリ ~~~~を作成できません:ファイルが存在します
mkdir: ディレクトリ ~~~~を作成できません:ファイルが存在します

<サーバ内状態>
指定フォルダに日付フォルダは出来ている

0 likes

5Answer

ちょっとそれだけの情報だとわからないのですが、
cronログはどうなってますでしょうか。同じシェルが3回起動しているかわかると思います。

/var/log/cron

を確認してみてください。

ちなみに複数ユーザに同じcrontabの設定が書いてあり、2重起動してしまったことがあります。

3Like

Comments

  1. 回答ありがとうございます。
    /var/log/cron を確認したところ下記状態で出力されておりました。
    やはり3重起動しているようです。

    < /var/log/cron >
    Oct 11 00:33:01 <ホスト名> CROND[1997176]: (root) CMD (sh <シェルの場所>/<シェル名称> >> <ログの場所>/<ログ名称> 2>&1)
    Oct 11 00:33:01 <ホスト名> CROND[1997223]: (root) CMD (sh <シェルの場所>/<シェル名称> >> <ログの場所>/<ログ名称> 2>&1)
    Oct 11 00:33:01 <ホスト名> CROND[1997238]: (root) CMD (sh <シェルの場所>/<シェル名称> >> <ログの場所>/<ログ名称> 2>&1)
  2. 頂いたURLを参考に ps コマンドを投入してみたところ、多重起動しているようでした。
    サーバを再起動実施し、再度 ps コマンドを投入してみたところ、多重起動がなくなったようです。

    <入力コマンド>
    ps aux | grep cron

    <出力表示結果>
    root 1749042 0.0 0.0 35160 3156 ? Ss 9月17 0:01 crond status
    root 1749090 0.0 0.0 35160 3156 ? Ss 9月17 0:01 crond status
    root 1751336 0.0 0.0 35156 3680 ? Ss 9月17 0:01 /usr/sbin/crond -n
    root 2057867 0.0 0.0 10308 1060 pts/0 S+ 18:06 0:00 grep --color=auto cron

    <入力コマンド>
    shutdown -r now

    <入力コマンド>(再起動実施後)
    ps aux | grep cron

    <出力表示結果>
    root 1357 0.0 0.0 35124 3592 ? Ss 18:31 0:00 /usr/sbin/crond -n
    root 2503 0.0 0.0 10308 1104 pts/0 S+ 18:35 0:00 grep --color=auto cron

3回の内1回は/etc/cron.dailyにスクリプトを置いてるからですね。
ここにあるスクリプトは1日に1回(概ね午前3時頃)実行されます。
更に、実行スクリプトのバックアップ的なファイルがあったりするとそれも実行されて2回。
crontabで書いた /var/spool/cron/root が実行されて3回
という感じではないでしょうか。

1Like

Comments

  1. 回答ありがとうございます。
    頂いた内容を踏まえてシェルファイルの場所を新しく作成した別フォルダへ変更しました。(変更前:/etc/cron.daily)
    現在、/etc/cron.daily フォルダには logrotate 以外は存在しない状況です。
    別フォルダへ変更したことに伴い、起動コマンドを変更しました。

    <入力コマンド>
    crontab -u root -e
    33 00 * * * sh <シェルの場所>/<シェル名称> >> <ログの場所>/<ログ名称> 2>&1

@yucatioさんの推理に一票!

/etc/cron.daily と crontab -u root -e そして残り1回が crontab -e で3かな?

 >> <ログの場所>/<ログ名称>

 因みに、私は 安定したら、末尾を >/dev/null 2>&1
 にします。

あと、type sh で確認し、cron内のコマンドは/bin/sh のようにフルパス記述が良いですよ!(ファイルも)

1Like

Comments

  1. 回答ありがとうございます。
    作業をrootユーザで実施しているのが問題でしょうか。
    下記コマンドを入力してみましたが、記述されていた内容は同じでした。

    <入力コマンド>
    crontab -u root -e
    crontab -e

シェルの場所を移動してみました。

本日 /var/log/cron を確認しましたが、状況に変化はなく、
3重起動しているように見受けられました。

同様に ログフォルダ内のログを確認しましたが、こちらも特に変化はありませんでした。
残念ながら解決していない状況です。

時間が悪いのかもしれないので、ずらしてみます。
<入力コマンド>
crontab -u root -e
34 01 * * * sh <シェル保管場所>/<シェルファイル名称> >> <ログ保管場所>/<ログ名称> 2>&1

0Like

/var/log/cron を確認し、多重起動が解決したことを確認しました。
沢山の回答ありがとうございました。

0Like

Your answer might help someone💌