cron을 사용하여 /etc/cron.hourly 디렉토리를 통해 매시간 스크립트를 실행하는 것은 이번이 처음입니다.
어떤 이유로 스크립트가 실행되지 않는 것 같습니다.
이것이 내가 한 일입니다:
/etc/cron.hour에 기본 테스트 스크립트를 추가했습니다.
/etc/cron.hourly# ll
-rwxr-xr-x 1 root root 152 Jun 20 23:26 test.bash*
스크립트는 다음과 같습니다.
/etc/cron.hourly# cat test.bash
#!/bin/bash
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
echo "This line from test.bash" > /tmp/from.test.script
이것은 /etc/crontab입니다:
/etc/cron.hourly# cat /etc/crontab
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
Cron 패키지는 기본적으로 설치되어 있으므로 다음으로 /etc/init.d/cron restart
:17까지 실행하고 기다렸습니다. 여전히 /tmp에 출력 흔적이 없습니다.
내가 또 무엇을 시도할 수 있을지 아시나요?
/etc/cron.hourly# 실행 부분 --list /etc/cron.hourly
/etc/cron.hourly# 실행 부분 --test /etc/cron.hourly
/etc/cron.hourly# strace 실행 부분 /etc/cron.hourly
execve("/bin/run-parts", ["run-parts", "/etc/cron.hourly"], [/* 16 vars */]) = 0
brk(0) = 0x7f8000
uname({sys="Linux", node="sheevaplug", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6efe000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=17282, ...}) = 0
mmap2(NULL, 17282, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6ef9000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabi/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0XX\1\0004\0\0\0"..., 512) = 512
lseek(3, 1231644, SEEK_SET) = 1231644
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1400) = 1400
lseek(3, 1231204, SEEK_SET) = 1231204
read(3, "A'\0\0\0aeabi\0\1\35\0\0\0\0054T\0\6\2\10\1\t\1\22\4\24\1\25\1"..., 40) = 40
fstat64(3, {st_mode=S_IFREG|0755, st_size=1233044, ...}) = 0
mmap2(NULL, 1275160, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6da3000
mprotect(0xb6ecd000, 32768, PROT_NONE) = 0
mmap2(0xb6ed5000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12a) = 0xb6ed5000
mmap2(0xb6ed8000, 9496, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6ed8000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ef8000
set_tls(0xb6ef86d0, 0xb6ef8da7, 0xb6ef8da8, 0xb6ef86d0, 0xb6f00000) = 0
mprotect(0xb6ed5000, 8192, PROT_READ) = 0
mprotect(0x12000, 4096, PROT_READ) = 0
mprotect(0xb6eff000, 4096, PROT_READ) = 0
munmap(0xb6ef9000, 17282) = 0
umask(022) = 022
brk(0) = 0x7f8000
brk(0x819000) = 0x819000
rt_sigaction(SIGCHLD, {0x931c, [], SA_NOCLDSTOP|0x4000000}, NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], NULL, 8) = 0
open("/etc/cron.hourly", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
fcntl64(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)
getdents(3, /* 6 entries */, 32768) = 128
getdents(3, /* 0 entries */, 32768) = 0
close(3) = 0
exit_group(0) = ?
답변1
어떤 배포판을 사용하고 있나요? ~에 따르면Ubuntu 런타임 구성 요소 매뉴얼:
--lsbsysinit 옵션 및 --regex 옵션이 지정되지 않은 경우 이름은 ASCII 대문자 및 소문자, ASCII 숫자, ASCII 밑줄 및 ASCII 빼기 하이픈으로 구성되어야 합니다.
따라서 run-parts
명명된 스크립트는 실행되지 않습니다 test.bash
. 이 규칙을 사용하면 예 *.old
를 들어 *.dpkg-dist
*.dpkg-old
dpkg 업그레이드를 통해 이름이 변경된 스크립트를 실수로 실행하는 것을 방지할 수 있습니다 .