incrontab이 명령을 실행하지 않습니다.

incrontab이 명령을 실행하지 않습니다.

기본적으로 incrontab을 사용하면 아무것도 변경되지 않고 결과도 얻지 못하며 명령이 실행되지 않는 것과 같습니다.

내 인크론 라인은 다음과 같습니다 /crrae IN_CREATE,IN_CLOSE_WRITE,IN_MOVED_TO /usr/bin/unix2dos $#

로그는 모든 것이 괜찮은 것처럼 정보를 제공하지만 실제로는 그렇지 않습니다.

생성된 추적은 다음과 같습니다.incrontab_trace_0.txt

 0.000000 poll([{fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}], 3, -1) = 1 ([{fd=8, revents=POLLIN}])
17.616276 read(8, "\1\0\0\0\0\1\0\0\0\0\0\0000\0\0\0ExportSageJDE_CO"..., 32768) = 64
 0.000145 stat64("/crrae", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
 0.000147 time(NULL)                = 1399228077
 0.000056 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=156, ...}) = 0
 0.000089 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=156, ...}) = 0
 0.000082 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=156, ...}) = 0
 0.000096 send(3, "<78>May  4 18:27:57 incrond[3183"..., 108, MSG_NOSIGNAL) = 108
 0.000104 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7f60718) = 31838
 0.000816 poll([{fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}], 3, -1) = -1 EINTR (Interrupted system call)
 0.000834 --- SIGCHLD (Child exited) @ 0 (0) ---
 0.000033 read(4, 0x8069c40, 32)    = -1 EAGAIN (Resource temporarily unavailable)
 0.000057 write(5, "X", 1)          = 1
 0.000056 sigreturn()               = ? (mask now [])
 0.000072 poll([{fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}], 3, -1) = 1 ([{fd=4, revents=POLLIN}])
 0.000068 read(4, "X", 1)           = 1
 0.000054 read(4, 0xbfd22dd9, 1)    = -1 EAGAIN (Resource temporarily unavailable)
 0.000057 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], WNOHANG) = 31838
 0.000060 waitpid(-1, 0xbfd22dd4, WNOHANG) = -1 ECHILD (No child processes)
 0.000051 poll([{fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}], 3, -1) = 1 ([{fd=8, revents=POLLIN}])
 0.009198 read(8, "\1\0\0\0\10\0\0\0\0\0\0\0000\0\0\0ExportSageJDE_CO"..., 32768) = 64
 0.000074 stat64("/crrae", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
 0.000118 time(NULL)                = 1399228077
 0.000057 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=156, ...}) = 0
 0.000084 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=156, ...}) = 0
 0.000082 stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=156, ...}) = 0
 0.000090 send(3, "<78>May  4 18:27:57 incrond[3183"..., 108, MSG_NOSIGNAL) = 108
 0.000065 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7f60718) = 31839
 0.000614 poll([{fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}], 3, -1) = -1 EINTR (Interrupted system call)
 0.000832 --- SIGCHLD (Child exited) @ 0 (0) ---
 0.000026 read(4, 0x8069c40, 32)    = -1 EAGAIN (Resource temporarily unavailable)
 0.000055 write(5, "X", 1)          = 1
 0.000054 sigreturn()               = ? (mask now [])
 0.000071 poll([{fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}], 3, -1) = 1 ([{fd=4, revents=POLLIN}])
 0.000067 read(4, "X", 1)           = 1
 0.000053 read(4, 0xbfd22dd9, 1)    = -1 EAGAIN (Resource temporarily unavailable)
 0.000051 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], WNOHANG) = 31839
 0.000058 waitpid(-1, 0xbfd22dd4, WNOHANG) = -1 ECHILD (No child processes)
 0.000050 poll([{fd=4, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLIN}], 3, -1 <unfinished ...>

인크론을 다음과 같이 변경할 때:

/crrae IN_CREATE,IN_CLOSE_WRITE,IN_MOVED_TO /usr/bin/unix2dos /crrae/$# 

또는

/crrae IN_CREATE,IN_CLOSE_WRITE,IN_MOVED_TO /usr/bin/unix2dos $@/$#

로그는 다음을 제공합니다.

May  4 18:15:10 srvovs incrond[20859]: (root) CMD (/usr/bin/unix2dos /crrae/u2dtmpPbqoFd)
May  4 18:15:10 srvovs incrond[20859]: (root) CMD (/usr/bin/unix2dos /crrae/u2dtmpN2Odxf)
May  4 18:15:10 srvovs incrond[20859]: (root) CMD (/usr/bin/unix2dos /crrae/u2dtmpN2Odxf)

여러 번 수정되었지만 incron.conf수정되지 않았습니다. 어떤 아이디어가 있나요?

답변1

unix2dos이벤트에 따라 파일을 쓰고 닫는 명령( )을 실행하는 것을 CLOSE_WRITE"루프"라고 합니다. incrontab사이클 보호 기능이 내장되어 있습니다.

답변2

어쩌면 인크론이 무엇을, 언제, 왜 하는지 포착해야 할 수도 있습니다.

#!/bin/bash

echo "[$( date )] $*" >>/tmp/myincronlog

incrontab 매개변수에 $%를 추가합니다.

명령에 하나의 인수만 제공한다는 점을 고려하면 이는 파일을 내부에서 수정한다는 의미입니다. 즉, 증분 작업으로 인해 증분 이벤트가 생성됩니다. incrond는 이러한 인스턴스를 처리하려고 시도하지만 IN_NO_LOOP를 사용하여 지시한 경우에만 가능합니다. 하지만 인크론을 트리거하는 방법인 인크론 작업 중에 대상 파일을 수정하지 않아 발생하는 문제는 피하는 것이 가장 좋습니다.

관련 정보