at
한동안 이것을 사용했는데 at
작업 ID가 영원히 증가하는 것 같습니다.
$ atq
332 Mon Sep 23 17:25:00 2013 a cklein
$ # I'm up to 332 at jobs!
흥미롭게도 at
완료된 작업에 대한 데이터는 유지되지 않는 것 같습니다.
$ at -c 331
Cannot find jobid 331
이 작업 ID 번호를 다시 0으로 재설정할 수 있습니까?
답변1
예상한 대로 atd
서비스를 다시 시작해도 작업 ID가 재설정되지 않았습니다.
예
일부 테스트 커밋
$ at -f test.bash now
job 105 at Mon Sep 23 20:04:00 2013
$ at -f test.bash now
job 106 at Mon Sep 23 20:04:00 2013
스풀 카탈로그를 주의 깊게 확인하세요
$ sudo ls -l /var/spool/at/spool/
total 0
다시 시작
$ sudo /etc/init.d/atd restart atd 중지: [ OK ] atd 시작: [ OK ]
후속 테스트 제출
$ at -f test.bash now
job 107 at Mon Sep 23 20:05:00 2013
$ at -f test.bash now
job 108 at Mon Sep 23 20:05:00 2013
깊은 발굴
atd
따라서 이와 같은 도구를 사용하여 실행 파일을 살펴보면 lsof
다음 사항을 알 수 있습니다.
$ sudo lsof | grep atd
atd 22341 root cwd DIR 253,0 4096 2103653 /var/spool/at
atd 22341 root rtd DIR 253,0 4096 2 /
atd 22341 root txt REG 253,0 24712 1192814 /usr/sbin/atd
atd 22341 root mem REG 253,0 57440 393478 /lib64/libnss_files-2.13.so
atd 22341 root mem REG 253,0 387352 393694 /lib64/libfreebl3.so
atd 22341 root mem REG 253,0 43304 393695 /lib64/libcrypt-2.13.so
atd 22341 root mem REG 253,0 99128 393328 /lib64/libaudit.so.1.0.0
atd 22341 root mem REG 253,0 22536 393671 /lib64/libdl-2.13.so
atd 22341 root mem REG 253,0 1956608 393664 /lib64/libc-2.13.so
atd 22341 root mem REG 253,0 13776 393333 /lib64/libpam_misc.so.0.82.0
atd 22341 root mem REG 253,0 55280 393331 /lib64/libpam.so.0.82.2
atd 22341 root mem REG 253,0 124592 393682 /lib64/libselinux.so.1
atd 22341 root mem REG 253,0 151456 393578 /lib64/ld-2.13.so
atd 22341 root 0u CHR 1,3 0t0 4066 /dev/null
atd 22341 root 1u CHR 1,3 0t0 4066 /dev/null
atd 22341 root 2u CHR 1,3 0t0 4066 /dev/null
atd 22341 root 3uW REG 253,0 6 1966556 /var/run/atd.pid
스풀 카탈로그를 조사하십시오.
따라서 열려 있는 파일은 없지만 디렉터리가 있으므로 /var/spool/at
더 조사해 보겠습니다.
$ sudo ls -la /var/spool/at/
total 20
drwx------. 3 daemon daemon 4096 Sep 23 20:42 .
drwxr-xr-x. 15 root root 4096 Aug 8 2011 ..
-rw-------. 1 daemon daemon 6 Sep 23 20:05 .SEQ
drwx------. 2 daemon daemon 4096 Sep 23 20:42 spool
빙고! 이것이 우리가 찾고 있는 것입니다 .SEQ
. 추가 문서에 다음이 나와 있습니다.
$ sudo more .SEQ
0006c
bc
우리는 이것이 16진수에서 10진수로 변환하는 올바른 값임을 스스로 확신할 수 있습니다 .
$ echo "ibase=16; 0006C"|bc
108
실험
여기에는 16진수 형식으로 숫자가 입력되는 것 같습니다. 작은 실험을 통해 이 값을 0으로 변경할 수 있습니다. 하지만 먼저 서비스를 중지하세요 atd
.
$ sudo /etc/init.d/atd stop
...edit file using vim, change it to 0...
$ sudo /etc/init.d/atd start
이제 또 다른 테스트를 실행해 보세요 at
.
$ at -f test.bash now
job 1 at Mon Sep 23 20:52:00 2013
그리고 숫자는 다시 시작되었고 우리는 1로 돌아왔습니다. 중지하고 편집하고 다시 시작하여 값을 다시 설정하면 다음과 같습니다 0006c
.
$ at -f test.bash now
job 109 at Mon Sep 23 20:53:00 2013
미스터리가 해결되었습니다.
다른 배포판에 대한 참고 사항
위 내용은 Fedora 시스템에 대한 복구이며 Debian 및 Ubuntu와 같은 다른 배포판에서는 .SEQ
이 파일을 완전히 다른 디렉터리에 저장할 수 있습니다. 예를 들어 Ubuntu는 다음과 같은 파일을 저장합니다.
$ sudo pwd
/var/spool/cron/atjobs
$ sudo ls -la
total 12
drwxrwx--T 2 daemon daemon 4096 Sep 23 21:19 .
drwxr-xr-x 5 root root 4096 Oct 17 2012 ..
-rw------- 1 daemon daemon 6 Sep 23 21:19 .SEQ