Итак, у меня есть файл backup.php, который создает резервную копию учетной записи пользователя. Использование top -c | grep username, я мог видеть, что процесс продолжается,

топ -c | grep newin показывает ниже

11334 root      39  19  128m  38m 7036 S 10.3  0.1   0:00.57 pkgacct - newin - av: 4 - write compressed stream
11351 newin     39  19  130m  33m 2792 S  3.7  0.1   0:00.11 pkgacct - newin - av: 4 - create tar stream
11334 root      39  19  128m  38m 7036 S  9.3  0.1   0:00.85 pkgacct - newin - av: 4 - write compressed stream
11351 newin     39  19  130m  34m 2792 S  1.3  0.1   0:00.15 pkgacct - newin - av: 4 - create tar stream
11334 root      39  19  128m  38m 7036 S 10.6  0.1   0:01.17 pkgacct - newin - av: 4 - write compressed stream
11412 newin     39  19 83172  16m 3856 S  1.7  0.1   0:00.05  /usr/local/cpanel/bin/ftpput /bacupdrive

Я хочу выполнить mail.sh после завершения процесса резервного копирования

Можете ли вы оказать некоторую помощь по этому вопросу?

Благодарю.

2 ответа2

1

Используйте следующую команду:

backup.php && mail.sh

&& является логическим оператором AND. Как только backup.php завершит работу без ошибок, он выполнит mail.sh Если backup.php выдает ошибку, mail.sh не будет выполнен.

Если вас не волнует, если backup.php выдает ошибку, используйте ; (точка с запятой) вместо &&:

backup.php; mail.sh

В этом случае mail.sh будет выполняться после любого завершения backup.php .

1

Я не запускал веб-сервер в Linux, поэтому я не знаю, какие процессы будут запускаться при запуске php скрипта, но мне пришло в голову несколько моментов.

(1) Самый простой способ проверить, работает ли программа, - это использовать pidof , который вернет ошибку, если она не найдена, например, для ожидания завершения процесса, используйте:

while pidof ProcessName; do sleep 1; done
mail.sh

(2) Однако, если сценарий заканчивается и перезапускается в течение секунды, вы можете пропустить завершение, поэтому вам нужен более сложный сценарий:

if p="$(pidof ProcessName)"
then while [ "$(pidof ProcessName)" == "$p" ]; do sleep 1; done
fi
mail.sh

Это гарантирует, что PID не изменится, как это произойдет в новом воплощении ProcessName .

Очевидно, что длительность задержки должна быть выбрана как баланс между скоростью, с которой вы хотите ответить на завершение, и накладными расходами на частые проверки.

Лучшим решением было бы, если бы на вашем веб-сервере была встроенная возможность запуска команды по завершении сценария php .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .