Tôi đã tạo một tập lệnh xử lý các tập tin trong một vòng lặp, bằng cách sử dụng một cuộc gọi quy trình. Tôi kiểm tra mã thoát của cuộc gọi đã nói để xem liệu tôi có nên di chuyển các tệp (khi thành công.) Vấn đề là, khi quá trình không thành công với một ngoại lệ, nó không bao giờ thoát. Làm cách nào để phát hiện ngoại lệ xảy ra, vì vậy tôi có thể làm cho tập lệnh chuyển sang các tệp tiếp theo?
Phần có liên quan của kịch bản
# Stream data
sstableloader -d $3 $tablepathfull
# On success, move data to target dir
if [[ $? != 0 ]]; then
echo "Error: Table failed - $tablepathfull"
else
echo "Table OK - $tablepathfull"
trgtdir="$2/$hostname/$keyspacename/$typename/$timestamp/$keyspacename/$tablename"
mkdir -p $trgtdir
mv $tablepathfull/* $trgtdir
rmdir $tablepathfull
fi
Nếu không có cách 'chính thức', có lẽ có thể nắm bắt được đầu ra (xem bên dưới) của lệnh gọi quy trình và chỉ cần giết quy trình một lần / nếu ngoại lệ xảy ra?
Đầu ra ngoại lệ
Exception in thread "STREAM-OUT-/XX.XX.XXX.88" Exception in thread "STREAM-OUT-/XX.XX.XXX.92" java.lang.NullPointerException
at org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.signalCloseDone(ConnectionHandler.java:249)
at org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.run(ConnectionHandler.java:375)
at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
at org.apache.cassandra.streaming.ConnectionHandler$MessageHandler.signalCloseDone(ConnectionHandler.java:249)
at org.apache.cassandra.streaming.ConnectionHandler$OutgoingMessageHandler.run(ConnectionHandler.java:375)
at java.lang.Thread.run(Thread.java:744)