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に関連する内容は出ませんでした。

私のワークステーションには64 GBの利用可能なメモリがありますが、ほとんどすべてのメモリを定期的に使用していないため、rsyncがこれを行う原因は何か混乱しています。今週末までに解決策を探す必要がありますので、より多くの情報が必要な場合はお気軽にお問い合わせください。

rsync コマンド:rsync -a -vv -Ph --temp-dir=/tmp /inbox/loc/ /outbox/loc

Python呼び出し: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

1回の実行での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にあります。

関連情報