Як я можу дізнатися, коли процес закінчив запис у файл?


9

У мене процес, породжений із оболонки. Він працює як фоновий процес і експортує БД у файл CSV в /tmp.

Як я можу дізнатися, коли фоновий процес завершено (завершено / вийшов) або якщо блокування файлу CSV закрите? Я планую передавати файл FTP іншому хосту, як тільки він буде написаний, але мені потрібен повний файл, перш ніж розпочати передачу файлу.


Зробити процес інформувати вас якось ...
Гонки легкості в орбіті

Відповіді:


7

У Linux файл не блокується навіть тоді, коли програма пише на нього (на відміну від Windows).

Щоб перевірити, чи завершено процес, використовуйте:

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

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

Щоб перевірити, чи відкритий у процесі файл, ви можете скористатися

  • lsof <file> він перелічить процеси, які відкрилися <file>

  • ls -l /proc/$(pgrep db-process)/fd перераховує дескриптори файлів, відкриті процесом db-process


7

Для цього можна використовувати waitвбудовану оболонку.

waitВбудований просто змушує оболонку , щоб зробити паузу в очікуванні фонових завдань до завершення. Ви можете або пройти певну роботу, яку потрібно чекати, або дозволити її чекати всіх робіт.

Наприклад:

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

Результати:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.