Làm thế nào tôi có thể biết khi nào một quá trình đã viết xong vào một tập tin?


9

Tôi có một quá trình được sinh ra từ vỏ. Nó đang chạy như một quá trình nền và xuất DB sang tệp CSV /tmp.

Làm cách nào để biết khi nào quá trình nền hoàn thành (kết thúc / thoát) hoặc nếu khóa tệp CSV đã đóng? Tôi dự định FTP tập tin này đến một máy chủ khác sau khi nó được viết, nhưng tôi cần tập tin hoàn chỉnh trước khi tôi bắt đầu chuyển tập tin.


Làm cho quá trình thông báo cho bạn bằng cách nào đó ...
Các cuộc đua nhẹ nhàng trong quỹ đạo

Câu trả lời:


7

Trên Linux, tệp không bị khóa ngay cả khi chương trình đang ghi vào nó (không giống như windows).

Để kiểm tra nếu quá trình hoàn thành, sử dụng:

while [[ 1 ]]; do
  pgrep dbprocess &>/dev/null

  if [[ $? -eq 0 ]]; then
    echo still running
  else
    echo finished
    # start ftp transfer
  fi
  sleep 2
done

Để kiểm tra xem quy trình có mở tệp không, bạn có thể sử dụng

  • lsof <file> nó sẽ liệt kê các tiến trình đã mở <file>

  • ls -l /proc/$(pgrep db-process)/fd liệt kê các mô tả tập tin mở theo quy trình db-process


7

Bạn có thể sử dụng waitshell tích hợp để thực hiện điều này.

Nội dung waitđơn giản làm cho trình bao tạm dừng để chờ các công việc nền hoàn thành. Bạn có thể vượt qua nó một công việc cụ thể để chờ đợi hoặc để nó chờ tất cả các công việc.

Ví dụ:

echo $(date): starting
sleep 5 &
echo $(date): do something else
wait
echo $(date): background job finished

Kết quả nào trong:

Thu Sep 25 12:06:48 EDT 2014: starting
Thu Sep 25 12:06:48 EDT 2014: do something else
Thu Sep 25 12:06:53 EDT 2014: background job finished
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.