공식 문서에 따라 CentOS 8 시스템에 daemontools-0.76을 설치했습니다.http://cr.yp.to/daemontools.html.
/service/test
그런 다음 텍스트를 stdout으로 에코하는 간단한 파일로 심볼릭 링크된 테스트 서비스를 만들었습니다 run
(기본적으로). 테스트 폴더와 실행 파일 모두 755 권한을 갖습니다.
run
파일:
#!/bin/sh
echo "test"
물론 파일은 수동으로 잘 실행되며, 실행할 수도 있고 /command/supervise /service/test
서비스도 예상대로 실행됩니다. svc -u/-d <service>
감독자를 통해 시작/중지하는 데 사용할 수 있습니다 .
그러나 실행하면 /command/svscan /service
다음 오류가 발생합니다.
svscan: warning: unable to start supervise test: permission denied
여기서 어떤 권한이 충돌하는지 나타내는 단서를 찾지 못했습니다. 내가 시도한 것들:
- 폴더
test/supervise
가 있는 경우(supervise
수동으로 실행할 때 생성됨)와 이 폴더가 제거된 경우(즉, 서비스를 처음부터 시작하는 경우) 어느 쪽이든 동일한 결과(참고:supervise
시작하려고 할 때 실행되지 않습니다svscan
. 그러나 동일한 오류로 백그라운드에서 실행하려고 시도했지만) - 명령 자체(아래
/package/admin/daemontools-0.76/command/
) 에 대한 확인된 권한(755) - 모든 폴더(/command, /service, /package 및 서비스 폴더)에 대한 권한(755)이 확인되었습니다.
- 아마도 이 디렉토리를 사용하려고 시도하는 경우 문제가 될 수 있는
/tmp
마운트 이후가 문제가 될 수 있다고 생각했지만 마운트된 상태에서 다시 시도했지만 도움이 되지 않았습니다.noexec
exec
- 도움 이 될 수 있다고 생각했지만
strace
, 훈련받지 않은 눈으로 볼 수 있는 문제는 없는 것 같습니다.
execve("/usr/local/bin/svscan", ["svscan", "/service"], 0x7ffc7385cfe8 /* 21 vars */) = 0
brk(NULL) = 0x1eab000
arch_prctl(0x3001 /* ARCH_??? */, 0x7fff479dd530) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=34379, ...}) = 0
mmap(NULL, 34379, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7af1b35000
close(3) = 0
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2607\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=4176104, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7af1b33000
mmap(NULL, 3938144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7af1554000
mprotect(0x7f7af170d000, 2093056, PROT_NONE) = 0
mmap(0x7f7af190c000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b8000) = 0x7f7af190c000 mmap(0x7f7af1912000, 14176, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f7af1912000
close(3) = 0
arch_prctl(ARCH_SET_FS, 0x7f7af1b34500) = 0
mprotect(0x7f7af190c000, 16384, PROT_READ) = 0
mprotect(0x603000, 4096, PROT_READ) = 0
mprotect(0x7f7af1b3e000, 4096, PROT_READ) = 0
munmap(0x7f7af1b35000, 34379) = 0
chdir("/service") = 0
wait4(-1, 0x7fff479dd4fc, WNOHANG, NULL) = -1 ECHILD (No child processes)
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
brk(NULL) = 0x1eab000
brk(0x1ecc000) = 0x1ecc000
brk(NULL) = 0x1ecc000
getdents64(3, /* 3 entries */, 32768) = 72
stat("test", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("test/log", 0x7fff479dd430) = -1 ENOENT (No such file or directory)
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f7af1b347d0) = 2884
getdents64(3, /* 0 entries */, 32768) = 0
close(3) = 0
nanosleep({tv_sec=5, tv_nsec=0}, svscan: warning: unable to start supervise test: permission denied
이견있는 사람?
편집: 방금 CentOS 7 시스템에서 이와 똑같은 단계를 시도했는데 올바르게 작동합니다. 어쩌면 최신 버전(2.17 대 2.28)과 호환되지 않는 코드베이스의 glibc 호출 문제일까요?