53737


いつもお世話になっています。  
下記の質問についてご存知の方がいらっしゃいましたらご教示を願います。

* * *

### 【質問の主旨】

もともと動作していた`# cd /etc/crontab`が実行されなくなりました。  
どうしたらファイルが実行されるようになるでしょうか？

### 【質問の補足】

1\.

現在のcronのデーモンは下記の通りです。

[code]

    # systemctl status crond
    ● crond.service - Command Scheduler
       Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
       Active: active (running) since 金 2018-10-12 09:24:05 JST; 5 months 12 days ago
      Process: 8103 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
     Main PID: 518 (crond)
       CGroup: /system.slice/crond.service
               └─518 /usr/sbin/crond -n
    
     3月 19 19:51:01 hogehoge.vs.sakura.ne.jp crond[518]: (*system*) RELOAD (/etc/crontab)
     3月 23 16:23:01 hogehoge.vs.sakura.ne.jp crond[518]: (root) CAN'T OPEN (/etc/crontab): そのようなファイルやディレクトリはありません
     3月 26 09:18:53 hogehoge.vs.sakura.ne.jp systemd[1]: Reloaded Command Scheduler.
     3月 26 09:19:01 hogehoge.vs.sakura.ne.jp crond[518]: (*system*) RELOAD (/etc/crontab)
     3月 26 09:19:01 hogehoge.vs.sakura.ne.jp crond[518]: (CRON) bad command (/etc/crontab)
     3月 26 09:19:01 hogehoge.vs.sakura.ne.jp crond[518]: (CRON) INFO (running with inotify support)
    Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
    
[/code]

2\.

cronのログは以下の通りです。直近の記録を抜粋しました。これより以前の記録も残っています。

[code]

    # vi /var/log/cron
    Mar 26 13:27:01 hogehoge run-parts(/etc/cron.hourly)[831]: starting 0anacron
    Mar 26 13:27:01 hogehoge run-parts(/etc/cron.hourly)[840]: finished 0anacron
    Mar 26 13:30:01 hogehoge CROND[844]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    Mar 26 13:40:01 hogehoge CROND[1889]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    Mar 26 13:50:01 hogehoge CROND[2896]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    Mar 26 14:00:01 hogehoge CROND[3899]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    Mar 26 14:10:01 hogehoge CROND[4911]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    Mar 26 14:20:01 hogehoge CROND[5904]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    Mar 26 14:27:01 hogehoge CROND[6908]: (root) CMD (run-parts /etc/cron.hourly)
    Mar 26 14:27:01 hogehoge run-parts(/etc/cron.hourly)[6908]: starting 0anacron
    Mar 26 14:27:01 hogehoge run-parts(/etc/cron.hourly)[6917]: finished 0anacron
    Mar 26 14:30:02 hogehoge CROND[6947]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    Mar 26 14:40:01 hogehoge CROND[7927]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    
[/code]

3\.

動かなくなった原因の1つとして考えられるのがcrontabのスワップファイル(/etc/.crontab.swap)から、正規のファイル(/etc/crontab)を作ってしまったことに原因があるかもしれません。元々は正常に動作していたcrontabファイルをうっかり削除してしまいました。

[code]

    # cd /etc
    # rm -rf crontab
    # cp .crontab.swap crontab
    
[/code]

ただ、crontabの内容を編集していたとき、心理的に焦っていました。上記のコマンドを実行して現在動作していない状況になったかどうかは、はっきりとした記憶ではありません。うる覚えで「こうしたのではないか」と言うものを書きました。誠に恐れ入ります。

4.  
CentOSのバージョンは以下の通りです。

[code]

    # cat /etc/redhat-release 
    CentOS Linux release 7.5.1804 (Core) 
    
[/code]

* * *

以上、ご確認のほどよろしくお願い申し上げます。


CC BY-SA 4.0
2019-03-26T06:00:29.383
53736
2019-03-26T06:35:44.420
32232
question
linux centos cron
もともと動作していたcrontabファイルが実行されなくなりました。どうすれば実行されるようになるでしょうか？


`vi`または`vim`が作るスワップファイル(*.swap)を **単純にコピーしてはいけません**
。元のファイルを削除してしまったけどスワップファイルがまだ残っている場合には、`vi`起動時に`-r`オプションを指定してリカバリーします。

[code]

    $ ls -A
    .crontab.swap
    $ vi -r crontab    # 元のファイル名を指定
    
[/code]

運よくリカバリーできれば以下のメッセージが表示されます。

> リカバリが終了しました. 全てが正しいかチェックしてください.  
>  (変更をチェックするために, このファイルを別の名前で保存した上で  
>  原本ファイルとの diff を実行すると良いでしょう)  
>  それから.swpファイルを削除してください

スワップファイルとして保存された瞬間の中身が表示されるので、問題ないか確認して保存し直してください(今回は元のファイルを削除してしまったのであれば同じ名前でも大丈夫でしょう)。

正常にファイルが復元できたら、先ほど表示された案内にしたがってスワップファイルを削除します。  
(スワップファイルが残ったままだと、次回以降オリジナルのファイルを開いた時にリカバリに関する警告が毎回表示されます)


CC BY-SA 4.0
2019-03-26T06:35:44.420
53737
2019-03-26T06:35:44.420
3060
53736
answer