Запустите nginx из сценария оболочки на crontab - PullRequest
0 голосов
/ 02 июня 2019

Я хочу проверить, работает NGINX или нет каждую 1 минуту. Мой сценарий оболочки:

#!/bin/sh
ps auxw | grep nginx | grep -v grep > /dev/null
if [ $? != 0 ]
then
echo "NGINX is not running"
/etc/init.d/nginx start
else
echo "NGINX is running"
fi

Сценарий запускается с sh launch.sh правильно (если NGINX не работает, запустите NGINX). Проблема в том, что когда я хочу запускать скрипт каждую минуту crontab, ничего не происходит. Список Crontab находится здесь:

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

* * * * * ~/sh launch.sh

Я проверяю * * * * * sh launch.sh, * * * * * launch.sh и * * * * * ./launch.sh, но ни один из них не работает правильно. Моя ОС - UBUNTU 18.04.

Это журнал:

Jun  3 08:28:01 hajitsu-VirtualBox CRON[3239]: (root) CMD (~/launch.sh)
Jun  3 08:28:01 hajitsu-VirtualBox CRON[3240]: (hajitsu) CMD (/home/hajitsu/launch.sh)
Jun  3 08:28:01 hajitsu-VirtualBox CRON[3238]: (CRON) info (No MTA installed, discarding output)
Jun  3 08:28:01 hajitsu-VirtualBox CRON[3237]: (CRON) info (No MTA installed, discarding output)
Jun  3 08:29:01 hajitsu-VirtualBox CRON[3374]: (root) CMD (~/launch.sh)
Jun  3 08:29:01 hajitsu-VirtualBox CRON[3373]: (CRON) info (No MTA installed, discarding output)
Jun  3 08:29:01 hajitsu-VirtualBox CRON[3376]: (hajitsu) CMD (/home/hajitsu/launch.sh)
Jun  3 08:29:01 hajitsu-VirtualBox CRON[3372]: (CRON) info (No MTA installed, discarding output)

Я думаю, что команда сработала, но ничего не произошло.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

NGINX нужна привилегия sudo.

Если у вас есть права sudo, вы можете изменить файл /etc/sudoers.d/username и выполнить команды sudo без пароля.

Файл обычно содержит пользователя и список команд, которые пользователь может выполнять без указания пароля. В вашем случае вы можете запустить:

sudo /etc/init.d/nginx start

Добавьте или измените файл sudoers. (замените имя пользователя вашим именем пользователя.)

$ EDITOR=nano sudo visudo -f /etc/sudoers.d/username  # EDITOR=nano sets my editor (because I am more comfortable with nano)

Скопируйте и вставьте следующее. Вы можете добавить больше sudo команд, разделенных запятой.

username ALL=(ALL) NOPASSWD: /etc/init.d/nginx start,/etc/init.d/nginx start

Примечание: команды будут выполняться только с sudo.

Prepend sudo в вашем launch.sh:

#!/bin/sh
ps auxw | grep nginx | grep -v grep > /dev/null
if [ $? != 0 ]
then
echo "NGINX is not running"
sudo /etc/init.d/nginx start
else
echo "NGINX is running"
fi

Сделать файл исполняемым.

$ chmod +x launch.sh
0 голосов
/ 02 июня 2019

~ не будет расширен, как в интерактивной оболочке в crontab. Вместо этого используйте /home/username.

...