Cron 과 Anacron 에 관련된 장황한 얘기는 다음 글로 미루고, 이 글에선 ‘masked’ 에 한정하여, 해법에 대해 정리한다.
서버에 설치된 snapper 가 도무지 동작을 안한다. Snapper 는 cron daily 에 들어가 있었고, 따라서 매일 실행이 되어야 마땅한데, 전혀 실행이 되지 않아 Snapshot 풍년 사태가 벌어졌다.
따라서 때때로 수동 작업을 해야하는 상황이 되었는데.. 언젠가부터 원인 파악을 하려고 했으나 차일 피일 미루던 차, 드디어 날을 잡고 원인 파악에 나섰다.
정말, 이런 저런 삽질에 삽질을 거듭한 결과, anacron 은 Daemon 이 아니란 사실을 알게 되었다. 따라서 이를 돌려주려면 systemd 등의 힘을 빌려야 한다고 한다.
하여, 확인해봤다. 그런데?
$ sudo systemctl status anacron ● anacron.service Loaded: masked (/dev/null; bad) Active: inactive (dead) $ sudo systemctl status anacron.timer ● anacron.timer Loaded: masked (/dev/null; bad) Active: inactive (dead) Trigger: n/a
둘 모두 죽어(masked)있다.
간단히 정리하면, cron 은 24시간 켜있는 시스템을 가정하고 있고, anacron 은 그렇지 못한, 데스크탑등을 대상으로 하고 있다.
따라서 ‘우분투 서버’를 설치하면, Anacron 은 기본으로 포함되지 않는다. ‘서버’란 24시간 돌아가는 게 기본이라 그런 모양이다.
그러나 내 서버는 24시간 돌지않을 뿐더러, GUI 도 추가 설치했기 때문에, Anacron 이 따로 설치가 되어있는 상태였다.
먼저 ‘우분투 서버’를 설치한 뒤, Xubuntu 데스크탑을 추가로 설치했는데, 그 와중에 Anacron 이 같이 딸려왔고, 설정하는 와중에 어디선가 문제가 생겼는지 제대로 실행이 안되는 상황에 이르렀는데..
잠시 여기서 /etc/crontab
을 보면,
17 * * * * root cd / && run-parts --report /etc/cron.hourly 06 16 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 19 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 19 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
이런 식으로 되어 있어서, 해당 시간에 cron 이 실행은 되지만, Hourly 를 제외한 나머지 3종은, anacron 이 설치되어 있고 실행 파일이라면(test -x), run-parts 작업을 하지 않고 그냥 넘겨버린다.
그렇다면 실제 작업 실행은 Anacron 이 해줘야 하는데, 정작 얘는 죽어있으니(masked)..
새 생명을 주려면 간단히 이렇게 하면 된다. (한 줄에 한꺼번에 써줘도 된다.)
$ sudo systemctl unmask anacron
$ sudo systemctl unmask anacron.timer
혹시 Disable 되어 있다면, (systemd status 로 확인 가능)
$ sudo systemctl enable anacron anacron.timer
자! 이제 Snapper 가 제대로 작동한다.