本文将自己遇到的一些自定义脚本加入开机启动项却不成功的问题加以说明,花费了我很长时间才得以解决,当然也多谢了自己朋友的帮忙,正是因为他们的提醒,最后才找到了解决的办法,谢谢他们!!!!

系统是centos5.5 

应用:nginx+perl+fastcgi以及tomcat

现有几个脚本需加入/etc/rc.local里让他们开机自己启动,如下:

# vi /etc/rc.local

/usr/local/nginx/sbin/start_perl_cgi.sh stop

/usr/local/nginx/sbin/start_perl_cgi.sh start

/usr/local/tomcat/bin/startup.sh

最后查找资料说tomcat不启动是因为需要相关的环境变量,而且它需要的环境变量已经在/etc/profile里进行了设置:

但是死活不开机自动启动,只是找不到需要的jdk,如下设置即可:

source /etc/profile

/usr/local/tomcat/bin/startup.sh

或者:

export JAVA_HOME=/usr/local/jdk

/usr/local/tomcat/bin/startup.sh

这样tomcat就能开机自动启动了.

最让人头疼的是:/usr/local/nginx/sbin/start_perl_cgi.sh start怎么弄都不成功,不开机启动,但是手动执行却总是能成功!

脚本内容如下,其实这个脚本很简单,相信你应该没问题的,这个脚本网上很多:

#vi /usr/local/nginx/sbin/start_perl_cgi.sh

#!/bin/bash

#set -x

if [[ $# != 1 ]];then

echo "usage $0 start|stop|restart"

exit 1

fi

dir=/usr/local/nginx

stop ()

{

if [ -e $dir/logs/perl-fcgi.pid ];then

kill -USR1 `cat $dir/logs/perl-fcgi.pid` 2>&1> /dev/null

rm -f $dir/logs/perl-fcgi.pid 2>&1> /dev/null

fi

if [ -e $dir/logs/perl-fcgi.sock ];then

rm -f $dir/logs/perl-fcgi.sock 2>&1> /dev/null

fi       ##红色部分网上的没有加if判断语句和-f选项,在这里我加了,首先对其进行判断一下,不然在没有该文件的情况下会有提示信息:

echo "stop perl-fcgi done"

}

start ()

{

rm -f $dir/now_start_perl_fcgi.sh 2>&1 >/dev/null

chown nobody.nobody $dir/logs

echo "$dir/perl-fcgi.pl -l $dir/logs/perl-fcgi.log -pid $dir/logs/perl-fcgi.pid -S $dir/logs/perl-fcgi.sock" >>$dir/now_start_perl_fcgi.sh

chown nobody.nobody $dir/now_start_perl_fcgi.sh

chmod u+x $dir/now_start_perl_fcgi.sh

sudo -u nobody $dir/now_start_perl_fcgi.sh

echo "start perl-fcgi done"

}

case $1 in

stop)

stop

;;

start)

start

;;

restart)

stop

start

;;

esac

其实看完这个脚本是没有问题的!请注意里面蓝色部分注释了的内容(#set -x 这里我没有开启调试信息)

于是上网查找资料,有的说是rc.local里面需要使用绝对路径,有的说是权限问题.但是经过排查都不是这样的问题.

比如说不能调用有变量的路径即:$dir

可以在rc.local里实验一下:

#vi /etc/rc.local

dir=/usr/local/nginx

echo "hello,this is $dir" > /home/zhangzj/ceshi

保存退出,查看: #cat /home/zhangzj/ceshi

hello,this is /usr/local/nginx   #说明这样使用没有问题

最后在一朋友的帮助下说开启调试信息即:将set -x 打开,进行如下操作:

#vi /etc/rc.local

/usr/local/nginx/sbin/start_perl_cgi.sh stop > /home/zhangzj/stop

/usr/local/nginx/sbin/start_perl_cgi.sh start >/home/zhangzj/start

保存,退出:执行source /etc/rc.local 让其生效,最好执行,查看有没有错误设置以免造成开机无法启动的内容.查看调试信息:

#cat /home/zhangzj/stop

#cat /home/zhangzj/start

看他们有什么问题,然后针对问题进行解决.但是我这样执行后我这里没有错误,于是我将机器重启,再次查看上面调试信息时,出现以下情况:

注意红色的部分: sudo: sorry, you must have a tty to run sudo

!!!!意思是执行sudo 的shell默认需要tty(终端),而这里没有.在 /etc/rc.local 中的命令,是没有控制终端的。

上网查找资料说,只需如下操作即可:

注释掉 /etc/sudoers中 ‘Defaults requiretty ’.保存退出,机器重启,问题得以解决.

关于requiretty的解释如下:

If set, sudo will only run when the user is logged in to a real tty. When this flag is set, sudo can only be run from a login session and not via other means such as cron(8) or cgi-bin scripts. This flag is off by default.

1Defaults  requiretty,修改为 #Defaults  requiretty,表示不需要控制终端。

2) Defaults  requiretty,修改为 Defaults:nobody !requiretty,表示仅 nobody 用户不需要控制终端。

3如果修改为 Defaults:%nobody !requiretty,表示仅 nobody 组不需要控制终端。

Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行:

Defaults    env_reset

其实这是一个很简单的问题,但是我却花了很长时间才得以解决,就是因为当时没有想到开启调试信息,可见在一个脚本执行不成功时,开启调试信息:set -x 查看其执行过程是多么的重要,这样也便于我们查找问题的关键所在.当然当你头脑发昏时,也不妨问问你的朋友,他们的意见也许对你很重要!!!!

转载于:https://www.cnblogs.com/flypiggy/p/3232392.html

关于自定义脚本rc.local里开机不启动的问题--以tomcat和perl相关的脚本为例相关推荐

  1. linux 下编辑 rc.local 设置开机启动

    设置开机启动示例: # touch /etc/init.d/rc.local 设置为可执行: # chmod +x /etc/init.d/rc.local 用 update-rc.d 设置启动级别: ...

  2. 【Linux】rc.local和rc.d/rc.local的区别|rc.local文件开机不执行

    rc.local和rc.d/rc.local的区别 /etc/rc.d/rc.local 用于添加开机启动命令 /etc/rc.local是/etc/rc.d/rc.local的软连接 rc.loca ...

  3. rc.local介绍(linux启动系列之一)

    摘自http://www.cnblogs.com/diyunpeng/ linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘. 本文中假设inittab中设置 ...

  4. ubuntu 在 rc.local 里添加了命令为什么无法执行

    sudo systemctl enable rc-local.service 在linux下,如需添加随系统启动而自动运行的服务,只需在/etc/rc.d/rc.local 脚本文件中添加即可. 1. ...

  5. Linux启动脚本rc.local 不执行的解决方法

    文章目录 1./etc/rc.local是/etc/rc.d/rc.local的软链接 2.看看/etc/rc.d/rc.local的权限 3.修改/etc/rc.d/rc.local的可执行权限 4 ...

  6. Ubuntu16.04 rc.local不生效,启动过程中报“Failed to start /etc/rc.local Compatibility”错误

    使用Ubuntu16.04时,发现有时候启动脚本/etc/rc.local中的命令不生效,随即发现在这种情况下系统启动时会打印 Failed to start /etc/rc.local Compat ...

  7. 两段用来启动/重启Linux下Tomcat的Perl脚本

    两段代码,第二段比较好些. 下面是Split输出结果方式的代码: #!/usr/local/bin/perl #Date:2015-07-07 print "Begin to restart ...

  8. armbian系统实现服务器重启后自动运行指令及解决rc.local和rc-local.service出现的错误

    玩客云刷了armbian系统,按照ubuntu的自动运行指令的方法修改了rc.local并保存,重启后发现指令没有自动运行. 在/root/目录下新建了djangoserver.sh文件,并赋予执行权 ...

  9. mysql etc rc.local_CentOS 7 开机启动自定义配置文件:/etc/rc.local 不执行解决办法 | IT运维网...

    最近在安装程序时发现CentOS 7的开机自定义配置文件(/etc/rc.local)内配置了启动脚本不会开机执行:于是查看了下配置文件内容发现了问题的原因 [root@localhost ~]# c ...

最新文章

  1. 零基础入门学习Python22-递归2 斐波那契数列和汉诺塔
  2. IDEA快速入门(Mac版)
  3. 8个高效的Python爬虫框架分享
  4. STL模板整理 set
  5. YTU 1009: University
  6. 腾讯TBS加载网页无法自适应记录
  7. iOS绘图框架CoreGraphics分析
  8. static、const、static const、const static成员的初始化问题
  9. 背景图片自适应屏幕大小CSS写法
  10. 海贼C语言,PSV海贼无双3金手指代码 (PSVC)
  11. 程序猿必看的10部黑客电影
  12. 由ERA5逐小时数据获取逐日数据——三种方法
  13. 第一讲 OC简介及基本语法
  14. 光分配网(ODN)一级分光和二级分光的区别及应用场景
  15. packages are looking for funding run `npm fund` for details ( npm 支持开发者添加募款链接)
  16. QKX-ZSZ-4000岩体真三轴动静载荷-应力应变曲线绘制软件
  17. KONICA MINOLTA 423SeriesPS-8打印机驱动
  18. Islands UVA - 1665
  19. C# 学习笔记 1.初识
  20. 如何通俗的解释全微分

热门文章

  1. MySQL压测工具--sysbench
  2. ThreadPoolExecutor的应用和实现分析(中)—— 任务处理相关源码分析 线程利用(转)...
  3. haproxy是如何工作的?
  4. ubuntu18 安装完怎么设置中文输入法?
  5. html语言ppt,HTML语言课件.ppt
  6. Python——模拟轮盘抽奖游戏
  7. moco在接口自动化中的应用
  8. APP自动化测试系列之Appium环境安装
  9. 请允许我用2019年11种主流编程语言,祝祖国70华诞快乐!
  10. java快捷输入:IDEA