作者: | 来源:互联网 | 2023-08-25 21:23
我试图从一个通过cron作业调用的脚本重启NGINX服务(它在root用户在命令行中运行时有效)–我不确定这是否相关但是还会创建相关的cron作业通过脚本.我尝试了多个命令,但我正
我试图从一个通过cron作业调用的脚本重启NGINX服务(它在root用户在命令行中运行时有效) – 我不确定这是否相关但是还会创建相关的cron作业通过脚本.我尝试了多个命令,但我正在使用的当前命令如下:
sudo /etc/init.d/nginx restart
任何有关这方面的帮助都会很棒!
UPDATE
下面是cron运行并尝试重新加载nginx服务的脚本
#!/bin/bash
NGINX_COnFIG='/etc/nginx/sites-available'
NGINX_SITES_ENABLED='/etc/nginx/sites-enabled'
WEB_DIR='/var/www/vhosts/demos'
EMAIL=$1
DOMAIN=$2
SITE_DIR=$3
echo $DOMAIN
echo $SITE_DIR
# Remove the nginx configurtations
rm -Rf $NGINX_CONFIG/$DOMAIN.conf
rm -Rf $NGINX_SITES_ENABLED/$DOMAIN.conf
# Remove the access log
rm -Rf /var/log/nginx/$SITE_DIR.access.log
# Remove unicorn socket log
rm -Rf /tmp/unicorn.$SITE_DIR.sock
# Remove the DB
sudo psql -U postgres -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '_$SITE_DIR' AND pid <> pg_backend_pid();"
dropdb -U postgres $SITE_DIR
# Remove the sites application from the server
rm -Rf $WEB_DIR/$SITE_DIR/
if [[ ! "$(/sbin/service nginx status)" =~ "start/running" ]]
then
/etc/init.d/nginx reload
fi
解决方法:
你需要像root用户一样创建一个cron工作,所以,添加新的cron作业,以root用户身份登录,然后运行cn,然后运行crontab -e并添加它,
0 * * * * /etc/init.d/nginx重新加载
或者编辑你的
/etc/crontab
与root用户一起添加cron
0 * * * * root /etc/init.d/nginx reload
(根据需要调整时间表;以上时间每小时运行一次)
你不能运行一个cron whit sudo(我认为)你需要以root身份登录或以root身份编辑crontab并添加你的命令.
更新**************
为什么不运行
/etc/init.d/nginx reload
代替:
如果[[! “$(/ sbin / service nginx status)”=〜“start / running”]]
然后
/etc/init.d/nginx重新加载
科幻
或者更好的尝试这个:
/etc/init.d/nginx status > /dev/null
status="$?"
if [ $status -eq "0" ]; then
/etc/init.d/nginx reload
fi
在那里你可以添加一个else,如果nginx被停止重新启动它或类似的东西… forme working我在我的lite监控脚本http://kb.skamasle.com/2013/monitorear-servicios-ftp-mysql-apache-etc-y-levantar-si-esta-caido/上使用它
无论如何我们也可以使用这个:
* * * * * /usr/bin/pgrep nginx > /dev/null || /etc/init.d/nginx restart >> /var/log/messages
如果不重新启动它,只需检查是否存在nginx pid