Nick Potemkin wrote:
> On Tue, Nov 19, 2002 at 09:45:33PM +0600, Ilya Palagin wrote:
>
>
>>В общем, выяснилось следующее: cron _не создает_ файл командой touch, но
>>timestamp этого файла обновляет (если он уже существует), причем
>>в первом случае нет никакого упоминания о запуске команды в логе.
>>Вероятно, это следствие того, что cron работает в restricted shell?
>>Или это как-то по-другому надо понимать?
>
>
> Надо понимать по-другому. Такого быть не должно - у меня по крайней
> мере все ок. На 3.0. Запись в логе быть обязана. Если ее нет - значит
> крон не подхватил задание. Проверяй еще раз :) Пермишны и время очистки
> /tmp в том числе.
>
Да нет, для домашнего каталога тоже не работает. Вот так выглядит лог:
Nov 20 01:33:23 fax crontab[331]: (hyladm) BEGIN EDIT (hyladm)
Nov 20 01:33:28 fax crontab[331]: (hyladm) REPLACE (hyladm)
Nov 20 01:33:28 fax crontab[331]: (hyladm) END EDIT (hyladm)
Nov 20 01:33:58 fax crontab[334]: (hyladm) BEGIN EDIT (hyladm)
Nov 20 01:34:00 fax crontab[334]: (hyladm) END EDIT (hyladm)
Nov 20 01:34:01 fax /usr/sbin/cron[275]: (hyladm) RELOAD (crontabs/hyladm)
Nov 20 01:34:28 fax crontab[339]: (hyladm) BEGIN EDIT (hyladm)
Nov 20 01:34:33 fax crontab[339]: (hyladm) REPLACE (hyladm)
Nov 20 01:34:33 fax crontab[339]: (hyladm) END EDIT (hyladm)
Nov 20 01:35:01 fax /usr/sbin/cron[275]: (hyladm) RELOAD (crontabs/hyladm)
Nov 20 01:35:32 fax crontab[342]: (hyladm) LIST (hyladm)
В перерывах между редактированиями должно было происходить
выполнение заданий пользователя hyladm, но увы :-( Если для
рута работает хотя бы обновление timestamp, то для обычного аккаунта
вообще ничего, ни одна команда.
Система установлена по-минимуму, т.к. используется в кач-ве
факс-сервера (hylafax). Единственное изменение системы по умолчанию -
замена exim-а на postfix. Может, это что-то сломало? Но apt-get check
ни о каких ошибках не сообщает. Кроме того, я ставил ядро 2.4,
при установке Debian сообщил о возможных проблемах с линкером.
вот что говорит strace для cron из-под root (команда при этом не
выполняется):
309 time(NULL) = 1037736601
309 stat64("crontabs", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
309 stat64("/etc/crontab", {st_mode=S_IFREG|0644, st_size=596, ...}) = 0
309 stat64("/etc/cron.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
309 stat64("/etc/cron.d/exim", {st_mode=S_IFREG|0644, st_size=192,
...}) = 0
309 open("/etc/crontab", O_RDONLY) = 4
309 fstat64(4, {st_mode=S_IFREG|0644, st_size=596, ...}) = 0
309 close(4) = 0
309 open("/etc/cron.d", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
309 fstat64(4, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
309 fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
309 getdents64(0x4, 0x8051d00, 0x1000, 0x9) = 72
309 open("/etc/cron.d/exim", O_RDONLY) = 5
309 fstat64(5, {st_mode=S_IFREG|0644, st_size=192, ...}) = 0
309 close(5) = 0
309 getdents64(0x4, 0x8051d00, 0x1000, 0x9) = 0
309 close(4) = 0
309 open("crontabs", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
309 fstat64(4, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
309 fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
309 getdents64(0x4, 0x8051d00, 0x1000, 0x9) = 104
309 open("/etc/passwd", O_RDONLY) = 5
309 fcntl64(5, F_GETFD) = 0
309 fcntl64(5, F_SETFD, FD_CLOEXEC) = 0
309 fstat64(5, {st_mode=S_IFREG|0644, st_size=1103, ...}) = 0
309 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000
309 _llseek(5, 0, [0], SEEK_CUR) = 0
309 read(5, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1103
309 close(5) = 0
309 munmap(0x40015000, 4096) = 0
309 open("crontabs/hyladm", O_RDONLY) = 5
309 fstat64(5, {st_mode=S_IFREG|0600, st_size=247, ...}) = 0
309 close(5) = 0
309 open("/etc/passwd", O_RDONLY) = 5
309 fcntl64(5, F_GETFD) = 0
309 fcntl64(5, F_SETFD, FD_CLOEXEC) = 0
309 fstat64(5, {st_mode=S_IFREG|0644, st_size=1103, ...}) = 0
309 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000
309 _llseek(5, 0, [0], SEEK_CUR) = 0
309 read(5, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1103
309 close(5) = 0
309 munmap(0x40015000, 4096) = 0
309 open("crontabs/root", O_RDONLY) = 5
309 fstat64(5, {st_mode=S_IFREG|0600, st_size=241, ...}) = 0
309 getpid() = 309
309 time([1037736601]) = 1037736601
309 getpid() = 309
309 rt_sigaction(SIGPIPE, {0x400ebf28, [], 0x4000000}, {SIG_DFL}, 8) = 0
309 socket(PF_UNIX, SOCK_DGRAM, 0) = 6
309 fcntl64(6, F_SETFD, FD_CLOEXEC) = 0
309 connect(6, {sin_family=AF_UNIX, path="/dev/log"}, 16) = 0
309 send(6, "<78>Nov 20 02:10:01 cron[309]: ("..., 60, 0) = 60
309 rt_sigaction(SIGPIPE, {SIG_DFL}, NULL, 8) = 0
309 close(6) = 0
309 fcntl64(5, F_GETFL) = 0 (flags O_RDONLY)
309 fstat64(5, {st_mode=S_IFREG|0600, st_size=241, ...}) = 0
309 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000
309 _llseek(5, 0, [0], SEEK_CUR) = 0
309 read(5, "# DO NOT EDIT THIS FILE - edit t"..., 4096) = 241
309 _llseek(5, 241, [241], SEEK_SET) = 0
309 read(5, "", 4096) = 0
309 read(5, "", 4096) = 0
309 close(5) = 0
309 munmap(0x40015000, 4096) = 0
309 close(5) = -1 EBADF (Bad file descriptor)
309 getdents64(0x4, 0x8051d00, 0x1000, 0x9) = 0
309 close(4) = 0
309 time(NULL) = 1037736601
309 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
309 rt_sigaction(SIGCHLD, NULL, {0x804a0a8, [CHLD],
SA_RESTART|0x4000000}, 8) = 0
309 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
309 nanosleep({60, 0}, {60, 0}) = 0
Блин, ни с одним дистрибутивом такого гемора не было, да еще в таких
мелочах!
Решил внедрить самый правильный из линуксов, а оказалось - поимел
глюкодром :-(