systemd에서 실행할 때 rsync 오류 코드 20

systemd에서 실행할 때 rsync 오류 코드 20

CentOS7.4, rsync v3.1.2 실행

rsync를 사용하여 원격 파일 서버 위치를 폴링하는 Python 스크립트(v3.6)가 있습니다. Rsync는 원격 위치의 드롭 폴더가 로컬 컴퓨터의 폴더와 동일한지 확인합니다. 이 폴더가 동일해야 하며 rsync가 작업에 달려 있는 것 같습니다.

그러나 파일이 40개가 넘는 경우 rsync는 오류를 발생시키고 다음 출력을 표시 rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(638) [sender=3.1.2]합니다 rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(504) [generator=3.1.2]. 이러한 파일은 거의 항상 일련의 jpeg 이미지와 단일 xml 파일입니다.

문제 없이 터미널 셸에서 정확한 rsync 명령을 실행했습니다. 내 스크립트를 보호하고 프로그램을 처리하기 위해 systemd에 맡겼기 때문에 그렇게 많은 파일을 복사하는 rsync를 좋아하지 않는 것 같습니다. 왜 그런지 잘 모르겠습니다. rsync가 SIGINT, SIGTERM 또는 SIGHUP(오류에 명시된 대로)을 수신했기 때문에 커널의 OOM 킬러가 범인이라는 인상을 받았지만 journalctl -kOOM 킬러를 찾기 위해 달려갔지만 rsync와 관련된 내용은 나오지 않았습니다.

내 워크스테이션에는 64GB의 사용 가능한 메모리가 있지만 거의 모든 메모리를 정기적으로 사용하지 않으므로 rsync가 이 작업을 수행하는 원인이 무엇인지 혼란스럽습니다. 이번 주말까지 해결책을 찾아야 하므로 더 많은 정보가 필요하시면 언제든지 문의해 주세요.

rsync 명령:rsync -a -vv -Ph --temp-dir=/tmp /inbox/loc/ /outbox/loc

파이썬 호출:retval = subprocess.check_call(['rsync','-a', '-vv', '-Ph', '--temp-dir=/tmp', inbox, outbox])

시스템 장치 파일:

[Unit]
Description = CAR daemon

[Service]
Type = simple
PIDFile = /var/run/card/card.pid
ExecStart = /usr/bin/python3.6 /scratch/ssd/jamal/dev/github/CAR_WF/card/main.py

[Install]
WantedBy = multi-user.target

한 번의 실행에서 Journalctl 출력 예(민감한 데이터에 대해 편집됨):

Dec 18 08:59:13 hostname systemd[1]: Started CAR daemon.
Dec 18 08:59:13 hostname systemd[1]: Starting CAR daemon...
Dec 18 08:59:14 hostname python3.6[2928]: sending incremental file list
Dec 18 08:59:14 hostname python3.6[2928]: delta-transmission disabled for local transfer or --whole-file
Dec 18 08:59:14 hostname python3.6[2928]: ./
Dec 18 08:59:14 hostname python3.6[2928]: FOR VFX DOCUMENT/
Dec 18 08:59:14 hostname python3.6[2928]: FOR VFX DOCUMENT/0000 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0001 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0002 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0003 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0004 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0005 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0006 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0007 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0008 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [102B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0009 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [103B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0010 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [103B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0011 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: [103B blob data]
Dec 18 08:59:15 hostname python3.6[2928]: FOR VFX DOCUMENT/0012 file.jpg
Dec 18 08:59:15 hostname python3.6[2928]: rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(638) [sender=3.1.2]
Dec 18 08:59:15 hostname python3.6[2928]: rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(504) [generator=3.1.2]

출력 ulimit -a:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 256628
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256628
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

rsync가 다음과 같이 호출된다는 점을 추가해야 합니다.

  1. Systemd는 Python 프로세스를 생성합니다.
  2. subprocess.Popen()Python 스크립트는 다음 매개변수를 사용하여 초기화 시 폴링 프로세스를 생성합니다.['python3.6', '/path/to/poller.py', '/inbox/dir/', '/outbox/dir']
  3. 폴러 타이머가 0에 도달하면 rsync를 호출하여 변경 사항을 확인합니다.

이것이 rsync 프로세스가 호출되는 위치를 명확히 하기를 바랍니다.

답변1

나에게는 rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(638)rsync를 실행하는 사용자의 SSH 키를 대상 서버에 복사하여 이 문제를 해결했습니다. 이를 위해 나는 다음을 실행했습니다.

ssh-copy-id [user]@[host-name]

키를 생성하지 않았거나 Known_hosts에 호스트를 추가하지 않은 경우 먼저 다음 명령을 실행하십시오.

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
ssh-keyscan -H [host-name] >> ~/.ssh/known_hosts

Oracle Linux 7, rsync 버전 3.1.2에 있습니다.

관련 정보