Ubuntu程序自启动

1.开机启动时自动运行程序

Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。

a、方法一,编辑rc.loacl脚本 

Ubuntu开机之后会执行/etc/rc.local文件中的脚本,

所以我们可以直接在/etc/rc.local中添加启动脚本。

当然要添加到语句:exit 0 前面才行。

如:

sudo vi /etc/rc.local

/opt/myscript.sh

然后在 exit 0 前面添加好脚本代码。

b、方法二,添加一个Ubuntu的开机启动服务。

如果要添加为开机启动执行的脚本文件,

可先将脚本复制或者软连接/etc/init.d/目录下,

然后用:update-rc.d xxx defaults NN命令(NN为启动顺序),

将脚本添加到初始化执行的队列中去。

注意如果脚本需要用到网络,则NN需设置一个比较大的数字,如99。

1) 将你的启动脚本复制到 /etc/init.d目录下
 以下假设你的脚本文件名为 test。
2) 设置脚本文件的权限
 $ sudo chmod 755 /etc/init.d/test
3) 执行如下命令将脚本放到启动脚本中去:
 $ cd /etc/init.d
 $ sudo update-rc.d test defaults 95
 注:其中数字95是脚本启动的顺序号,按照自己的需要相应修改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就知道这个数字的具体作用了。
卸载启动脚本的方法:
 $ cd /etc/init.d
$ sudo update-rc.d -f test remove

test脚本的内容
[html]  view plain copy
  1. #!/bin/sh  
  2. ### BEGIN INIT INFO  
  3. # Provides:          test  
  4. # Required-Start:    $local_fs $remote_fs $network $syslog  
  5. # Required-Stop:     $local_fs $remote_fs $network $syslog  
  6. # Default-Start:     2 3 4 5  
  7. # Default-Stop:      0 1 6  
  8. # Short-Description: starts the test web server  
  9. # Description:       starts bell using start-stop-daemon  
  10. ### END INIT INFO  
  11.   
  12. EXEC_PATH=/usr/sbin/server  
  13. EXEC=Sargas  
  14. TRANSCODER=Alniyat  
  15. DAEMON=$EXEC_PATH/$EXEC  
  16. PID_FILE=/var/run/$EXEC.pid  
  17.   
  18. if ! [ -x $EXEC_PATH/$EXEC ] ; then  
  19.     echo "ERROR: $EXEC_PATH/$EXEC not found"  
  20.     exit 1  
  21. fi  
  22.   
  23. stop()  
  24. {  
  25.     echo "Stoping $EXEC ..."  
  26.     killall $DAEMON >/dev/null  
  27.     killall -s SIGINT $TRANSCODER >/dev/null  
  28.         rm -rf $PID_FILE  
  29.     echo "Shutting down $EXEC: [ OK ]"  
  30. }  
  31. start()  
  32. {  
  33.     echo "Starting $EXEC ..."  
  34.     $DAEMON $EXEC_PATH > /dev/null &  
  35.         echo $? > $PID_FILE  
  36.     echo "Starting $EXEC: [ OK ]"  
  37. }  
  38.   
  39. restart()  
  40. {  
  41.     stop  
  42.     start  
  43. }  
  44.   
  45. status()  
  46. {  
  47.  if [ -f "$PID_FILE" ] ; then  
  48.  echo "$EXEC is running..."  
  49.  else  
  50.  echo "$EXEC is stopped..."  
  51.  fi  
  52. }  
  53.   
  54. case "$1" in  
  55.     start)  
  56.     start  
  57.     ;;  
  58.     stop)  
  59.     stop  
  60.     ;;  
  61.     restart)  
  62.     restart  
  63.     ;;  
  64.     status)  
  65.     status  
  66.     ;;  
  67. *)  
  68.     echo "Usage: service $EXEC {start|stop|restart|status}"  
  69.     exit 1  
  70. esac  
  71. exit $?  


运行级别

Ubuntu中的运行级别

  • 0(关闭系统)
  • 1(单用户模式,只允许root用户对系统进行维护。)
  • 2 到 5(多用户模式,其中3为字符界面,5为图形界面。)
  • 6(重启系统)

update-rc.d命令详解

从所有的运行级别中删除指定启动项
1
update-rc.d <span style="border: 0px; margin: 0px; padding: 0px; color: rgb(102, 0, 51);">-f</span> <<span style="border: 0px; margin: 0px; padding: 0px; color: rgb(194, 12, 185);"><strong>basename</strong></span>> remove
按指定顺序、在指定运行级别中启动或关闭
1
update-rc.d <<span style="border: 0px; margin: 0px; padding: 0px; color: rgb(194, 12, 185);"><strong>basename</strong></span>> start<span style="border: 0px; margin: 0px; padding: 0px; font-weight: bold;">|</span>stop <order> <runlevels>
1
实例:update-rc.d apachectl start <span style="border: 0px; margin: 0px; padding: 0px;">20</span> <span style="border: 0px; margin: 0px; padding: 0px;">2</span> <span style="border: 0px; margin: 0px; padding: 0px;">3</span> <span style="border: 0px; margin: 0px; padding: 0px;">4</span> <span style="border: 0px; margin: 0px; padding: 0px;">5</span> . stop <span style="border: 0px; margin: 0px; padding: 0px;">20</span> <span style="border: 0px; margin: 0px; padding: 0px;">0</span> <span style="border: 0px; margin: 0px; padding: 0px;">1</span> <span style="border: 0px; margin: 0px; padding: 0px;">6</span> .

解析:表示在2、3、4、5这五个运行级别中,由小到大,第20个开始运行apachectl;在 0 1 6这3个运行级别中,第20个关闭apachectl。这是合并起来的写法,注意它有2个点号,效果等于下面方法:

1
update-rc.d apachectl defaults
A启动后B才能启动,B关闭后A才关闭
1
2
update-rc.d A defaults <span style="border: 0px; margin: 0px; padding: 0px;">80</span> <span style="border: 0px; margin: 0px; padding: 0px;">20</span>
update-rc.d B defaults <span style="border: 0px; margin: 0px; padding: 0px;">90</span> <span style="border: 0px; margin: 0px; padding: 0px;">10</span>
启动和关闭顺序为90,级别默认
1
update-rc.d <<span style="border: 0px; margin: 0px; padding: 0px; color: rgb(194, 12, 185);"><strong>basename</strong></span>> defaults <span style="border: 0px; margin: 0px; padding: 0px;">90</span>
----------------------------------------------------------------

2.login登录时自动运行程序

用户登录时,bash首先自动执行系统管理员建立的全局登录script :/ect/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、 /.profile,但只执行最先找到的一个。
因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。

如:

vi /root/.profile

/opt/myscript.sh

下次系统启动就会自动加载执行/opt/myscript.sh脚本


3.退出登录时自动运行程序

退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。例如,在/.bash_logout中加入命令“tar -cvzf c.source.tgz *.c”,则在每次退出登录时自动执行 “tar” 命令备份 *.c 文件。

4.定期自动运行程序

Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。

例如,建立文件crondFile,内容为“00 9 23 Jan * HappyBirthday”,运行“crontab cronFile”命令后,每当元月23日上午9:00系统自动执行“HappyBirthday”的程序(“*”表示不管当天是星期几)。

5.定时自动运行程序一次

定时执行命令at 与crond 类似(但它只执行一次):命令在给定的时间执行,但不自动重复。at命令的一般格式为:at [ -f file ] time ,在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令:

$ at 12:00
at>mailto Roger -s ″Have a lunch″ < plan.txt
at>Ctr-D
Job 1 at 2000-11-09 12:00
2000-11-09 12:00时候自动发一标题为“Have a lunch”,内容为plan.txt文件内容的邮件给Roger。?9 12:00
2000-11-09 12:00时候自动发一标题为“Have a lunch”,内容为plan.txt文件内容的邮件给Roger。er。ger。er。


转载自:http://blog.csdn.net/sphone89/article/details/9188129

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值