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 -k
OOMキラーを見つけるために走りましたが、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が次のように呼び出されることを追加する必要があります。
- Systemd は Python プロセスを生成します。
subprocess.Popen()
Pythonスクリプトは、次のパラメータを使用して初期化時にポーリングプロセスを生成します。['python3.6', '/path/to/poller.py', '/inbox/dir/', '/outbox/dir']
- ポーラー タイマーが 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にあります。