Cron скрипт для перезапуска сервера Apache не работает - PullRequest
0 голосов
/ 11 ноября 2019

Я впервые использую cron. Я хочу перезапустить apacher на моем сервере, если объем доступной памяти превышает 500 МБ. Для этого я написал следующий скрипт:

restart_if_memory_full.sh (in / var / www / myapp /)

#!/bin/bash

mem=$(free -m | awk '/Mem:/{print $4}')
(( mem <= 500 )) && (sudo service apache2 restart)

Затем я выполнил его, выполнив(sudo chmod +x restart_if_memory_full.sh) и добавил следующую строку в cron с помощью (sudo crontab -e) (Обратите внимание, что я не использовал расширение .sh в соответствии с рекомендациями)

* * * * * /var/www/myapp/restart_if_memory_full 

Теперь я проверяю вывод по (grep CRON /var/log/syslog) и посмотрите это:

Nov 11 11:13:01 mardy2 CRON[31963]: (root) CMD (/var/www/myapp/restart_if_memory_full)
Nov 11 11:13:01 mardy2 CRON[31962]: (CRON) info (No MTA installed, discarding output)

Однако, когда я проверяю использование памяти htop, оно не уменьшается, и поэтому я понял, что сервер apache не был перезапущен. Итак, как мне сделать этот скрипт работоспособным?

1 Ответ

1 голос
/ 11 ноября 2019

Вы в основном сами ответили на свой вопрос:

Примечание. Я не использовал расширение .sh в соответствии с рекомендациями

Это не просто расширение, это часть имени файла,Поэтому, если ваш скрипт был сохранен как /var/www/myapp/restart_if_memory_full.sh, вы не можете просто удалить суффикс. Крон не найдет этот файл и ничего не сделает. Cron даже хотел бы сообщить вам об этом по электронной почте, но почтовый сервер для отправки оповещения не установлен:

(CRON) info (No MTA installed, discarding output).

Поэтому используйте полный путь и имяскрипт:

* * * * * /var/www/myapp/restart_if_memory_full.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...