- logrotate -vf /etc/logrotate.d/nginx
发现运行这个是没有问题的,终于,在service nginx restart后,发现了问题
问题是在用service nginx restart后,nginx.pid文件才会自动消失,于是,仔细检查脚本,发现一些端倪啊,一个字眼出现了
- killproc $prog -QUIT
-QUIT从容关闭,也就是说这个进程是慢慢关闭的,不是立即关闭的,于是验证。如图
查看进程如下
可以看到,nginx正在shutdown之中,但没有一下子全部关闭了。
随着时间的推移,nginx老的进程在继续关闭中……
到最后,nginx之前的老进程全部关闭……
这时,nginx.pid文件没有了
到此,nginx.pid文件神奇消失的问题终于被找出来了。
继续分析-----日志分割,依靠的是nginx.pid获取nginx的进程号,分割成功后,出现的情况是nginx依然昨天的日志,不写分割后的日志。
那么现在需要对这个脚本进行修改,把stop函数中的-QUIT改为-TERM 立即关闭。(话说我这个脚本是来自官网改造的,看来官网也不是100%的准确哦,做运维要细心啊)
官方脚本地址http://wiki.nginx.org/RedHatNginxInitScript
再次运用此脚本重启
- service nginx restart
问题不再重现,已经解决了。
总结,一个小小的参数,可能会引发无限大的问题,所以,学知识要细心啊!
=============================================================
附录一:nginx的信号控制
- TERM,INT 快速关闭;
- QUIT 从容关闭
- HUP 平滑重启,重新加载配置文件;
- USER1 重新打开日志文件,在切割日志的时候用途较大;
- USER2 平滑升级可执行程序;
- WINCH 从容关闭工作进程;
附录二:nginx的启动脚本如下
- #!/bin/sh
- #
- # nginx - this script starts and stops the nginx daemon
- #
- # chkconfig: - 85 15
- # description: Nginx is an HTTP(S) server, HTTP(S) reverse \
- # proxy and IMAP/POP3 proxy server
- # processname: nginx
- # config: /etc/nginx/nginx.conf
- # config: /etc/sysconfig/nginx
- # pidfile: /var/run/nginx.pid
-
- # Source function library.
- #. /etc/rc.d/init.d/functions
-
- # Source networking configuration.
- #. /etc/sysconfig/network
-
- # Check that networking is up.
- green='\e[0;32m'
- red='\e[0;31m'
- NC='\e[0m'
-
- nginx="/usr/sbin/nginx"
- prog=$(basename $nginx)
-
- NGINX_CONF_FILE="/etc/nginx/nginx.conf"
- pidfile="/var/run/nginx.pid"
- lockfile=/var/lock/subsys/nginx
-
- make_dirs() {
- # make required directories
- user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
- if [ -z "`grep $user /etc/passwd`" ]; then
- useradd -M -s /bin/nologin $user
- fi
- options=`$nginx -V 2>&1 | grep 'configure arguments:'`
- for opt in $options; do
- if [ `echo $opt | grep '.*-temp-path'` ]; then
- value=`echo $opt | cut -d "=" -f 2`
- if [ ! -d "$value" ]; then
- # echo "creating" $value
- mkdir -p $value && chown -R $user $value
- fi
- fi
- done
- }
-
- start() {
- [ -x $nginx ] || exit 5
- [ -f $NGINX_CONF_FILE ] || exit 6
- make_dirs
- echo -e "Starting $prog ...................................\c"
- $nginx -c $NGINX_CONF_FILE >/dev/null 2>&1
- retval=$?
- echo
- [ $retval -eq 0 ] && touch $lockfile && echo -e "Started $prog ...................................[ ${green}OK${NC} ]"
- [ $retval != 0 ] && echo -e "Started $prog ................................[ ${red}Falied${NC} ]\r"
- return $retval
- }
-
- stop() {
- echo -e "Stopping $prog ...................................\c"
- PID=`cat $pidfile`
- killproc $prog -TERM
- retval=$?
- echo
- [ $retval -eq 0 ] && rm -f $lockfile && echo -e "Stoped $prog ...................................[ ${green}OK${NC} ]\r"
- [ $retval != 0 ] && echo -e "Stoped $prog ................................[ ${red}Falied${NC} ]\r"
- return $retval
- }
- status(){
- if [ -e $pidfile ]
- then
- PID=`cat $pidfile`
- echo "Nginx (pid $PID) is running..."
- else
- echo "Nginx is stopped"
- fi
- }
-
- restart() {
- configtest || return $?
- stop
- sleep 1
- start
- }
-
- reload() {
- configtest || return $?
- echo -n $"Reloading $prog: "
- killproc $nginx -HUP
- RETVAL=$?
- echo
- }
-
- configtest() {
- $nginx -t -c $NGINX_CONF_FILE >/dev/null 2>&1
- }
-
- case "$1" in
- start)
- $1
- ;;
- stop)
- $1
- ;;
- status)
- $1
- ;;
- restart)
- $1
- ;;
- reload)
- $1
- ;;
- configtest)
- $1
- ;;
- *)
- echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"
- exit 2
- esac
附录三:日志切割脚本如下
- # cat /etc/logrotate.d/nginx
- /var/log/nginx/*.log {
- daily
- rotate 7
- missingok
- create 600 www www
- notifempty
- sharedscripts
- postrotate
- if [ -f /var/run/nginx.pid ]; then
- kill -USR1 $(cat /var/run/nginx.pid)
- fi
- endscript
- }
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O
当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question
我正在尝试将$stdout设置为临时写入一个文件,然后返回到一个文件。test.rb:old_stdout=$stdout$stdout.reopen("mytestfile.out",'w+')puts"thisgoesinmytestfile"$stdout=old_stdoutputs"thisshouldbeontheconsole"$stdout.reopen("mytestfile1.out",'w+')puts"thisgoesinmytestfile1:"$stdout=old_stdoutputs"thisshouldbebackontheconsole"这是输出。r
我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id