2011-04-27 4 views
1

텔넷을 호출하여 대화 형 셸에서 주간 서버에 연결하면 정상적으로 작동합니다. 그러나 cron 또는 bash 데몬 프로세스에 의해 실행되는 쉘 스크립트에서 동일한 telnet 호출이 발행 될 때, 이는 어떤 otput도 산출하지 못합니다. 하나데몬 프로세스에서 실행할 때 텔넷이 제대로 실행되지 않음

성공적인 : 하나

execve("/usr/bin/telnet", ["telnet", "192.168.0.11", "13"], [/* 24 vars */]) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x40005000 
stat("/etc/ld.so.cache", {st_mode=S_IFREG|0644, st_size=3128, ...}) = 0 
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 
mmap2(NULL, 3128, PROT_READ, MAP_SHARED, 3, 0) = 0x40006000 
close(3)        = 0 
stat("/etc/ld.so.preload", 0xbea5d8d4) = -1 ENOENT (No such file or directory) 
open("/lib/libc.so.0", O_RDONLY)  = 3 
fstat(3, {st_mode=S_IFREG|0755, st_size=324423, ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x40007000 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\320\253\0\0004\0\0\0\0"..., 4096) = 4096 
mmap2(NULL, 376832, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4000e000 
mmap2(0x4000e000, 319264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x4000e000 
mmap2(0x40064000, 4935, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x4e) = 0x40064000 
mmap2(0x40066000, 14712, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40066000 
close(3)        = 0 
munmap(0x40007000, 4096)    = 0 
munmap(0x40006000, 3128)    = 0 
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=20486, ...}) = 0 
mprotect(0x40064000, 4096, PROT_READ) = 0 
mprotect(0x4000c000, 4096, PROT_READ) = 0 
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 
getuid32()        = 0 
ioctl(0, TIOCGWINSZ, {ws_row=55, ws_col=203, ws_xpixel=0, ws_ypixel=0}) = 0 
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0 
brk(0)         = 0x91000 
brk(0x92000)       = 0x92000 
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3 
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 
connect(3, {sa_family=AF_INET, sin_port=htons(13), sin_addr=inet_addr("192.168.0.11")}, 16) = 0 
setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 
rt_sigaction(SIGINT, {0x667c0, [INT], SA_RESTART|0x4000000}, {SIG_DFL, [], 0}, 8) = 0 
poll([{fd=0, events=POLLIN}, {fd=3, events=POLLIN}], 2, -1) = 1 ([{fd=3, revents=POLLIN}]) 
read(3, "Wed Apr 27 11:42:10 2011\r\n"..., 128) = 26 
write(1, "Wed Apr 27 11:42:10 2011\r\n"..., 26) = 26 
poll([{fd=0, events=POLLIN}, {fd=3, events=POLLIN}], 2, -1) = 1 ([{fd=3, revents=POLLIN}]) 
read(3, ""..., 128)      = 0 
write(1, "Connection closed by foreign host"..., 35) = 35 
ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0 
exit(1)         = ? 

실패 :

execve("/usr/bin/telnet", ["/usr/bin/telnet", "192.168.0.11", "13"], [/* 22 vars */]) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x40005000 
stat("/etc/ld.so.cache", {st_mode=S_IFREG|0644, st_size=3128, ...}) = 0 
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 
mmap2(NULL, 3128, PROT_READ, MAP_SHARED, 3, 0) = 0x40006000 
close(3)        = 0 
stat("/etc/ld.so.preload", 0xbe90a8f4) = -1 ENOENT (No such file or directory) 
open("/lib/libc.so.0", O_RDONLY)  = 3 
fstat(3, {st_mode=S_IFREG|0755, st_size=324423, ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|0x4000000, -1, 0) = 0x40007000 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\320\253\0\0004\0\0\0\0"..., 4096) = 4096 
mmap2(NULL, 376832, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4000e000 
mmap2(0x4000e000, 319264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x4000e000 
mmap2(0x40064000, 4935, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x4e) = 0x40064000 
mmap2(0x40066000, 14712, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40066000 
close(3)        = 0 
munmap(0x40007000, 4096)    = 0 
munmap(0x40006000, 3128)    = 0 
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=20486, ...}) = 0 
mprotect(0x40064000, 4096, PROT_READ) = 0 
mprotect(0x4000c000, 4096, PROT_READ) = 0 
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbe90a714) = -1 ENOTTY (Inappropriate ioctl for device) 
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbe90a714) = -1 ENOTTY (Inappropriate ioctl for device) 
getuid32()        = 0 
ioctl(0, TIOCGWINSZ, 0xbe90a9cc)  = -1 ENOTTY (Inappropriate ioctl for device) 
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbe90a9b4) = -1 ENOTTY (Inappropriate ioctl for device) 
brk(0)         = 0x91000 
brk(0x92000)       = 0x92000 
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3 
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 
connect(3, {sa_family=AF_INET, sin_port=htons(13), sin_addr=inet_addr("192.168.0.11")}, 16) = 0 
setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 
rt_sigaction(SIGINT, {0x667c0, [INT], SA_RESTART|0x4000000}, {SIG_DFL, [], 0}, 8) = 0 
poll([{fd=0, events=POLLIN}, {fd=3, events=POLLIN}], 2, -1) = 2 ([{fd=0, revents=POLLIN}, {fd=3, revents=POLLIN}]) 
read(0, ""..., 128)      = 0 
exit(0)         = ? 

어떤 도움을 환영 나는 그들이 여기에 모두 전화를 straced합니다.

답변

4

Ermmm ... 파이프 또는 분리 된 입력은 단순히 이 아니며 터미널입니다. 어떤 환경 설정도이를 고치지 않을 것입니다. TRWTF가 데몬에서 텔넷을 사용 중입니다

간단한 이야기 ​​: 당신이 (ab) telnet을 사용하는 것과 같은 포트에 연결하기 위해 소켓을 사용하십시오. 이렇게하면 설정이 크게 단순화되고 터미널이나 하위 프로세스가 필요하지 않습니다.

+0

아, 완전히 맞습니다. 나는 이른 아침에 질문에 대답해서는 안된다. – drysdam

0
ioctl(0, TIOCGWINSZ, 0xbe90a9cc)  = -1 ENOTTY (Inappropriate ioctl for device) 

나는 이것이 당신의 문제라고 생각합니다. cron이 실행될 때, 당신은 똑같은 환경을 가지고 있지 않으며 당신이 일반 터미널에서하는 것처럼. 위의 줄은 두 출력이 보여주는 첫 번째 편차이며 터미널 창 크기 (WINSZ)를 설정/확인하는 것으로 보입니다. 이는 아마도 telnet 세션 창입니다. cron 스크립트에서 $TERM의 값을 확인하십시오.

관련 문제