下面用自启动apache为例;自启动脚本:/usr/local/apache2/bin;./apachectl start文件位于/etc/rc.d/init.d下,名为apached, 注意要可执行.#chmod +x /etc/rc.d/init.d/apached //设置文件的属性为可执行#ln -s /etc/rc.d/init.d/apached /etc/rc3.d/S90apache //建立软连接,快捷方式#ln -s /etc/rc.d/init.d/apached /etc/rc0.d/K20apache在Red Hat Linux中自动运行程序1.开机启动时自动运行程序Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。
init根据配置文件继续引导过程,启动其它进程。
通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或/etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。
例如:编辑/etc/rc.d/rc.local 文件,在文件最末加上一行"xinit"或"startx",可以在开机启动后直接进入X-Window。
2.登录时自动运行程序用户登录时,bash首先自动执行系统管理员建立的全局登录script :/etc/profile。
然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、/.profile,但只执行最先找到的一个。
因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。
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:00at>mailto Roger -s ″Have a lunch″ < plan.txtat>Ctr-DJob 1 at 2000-11-09 12:002000-11-09 12:00时候自动发一标题为"Have a lunch",内容为plan.txt文件内容的邮件给Roger。
#!/bin/bashRESTART="........" #里面写相应服务代码START="......."STOP=".........."case "$1" inrestart)$RESTARTecho "......";;start)$STARTecho "......";;STOP)$STOPecho "......";;*)echo "Usage: $0 {restart | start | stop}"exit 1esacexit 1脚本写完要修改一下权限 chmod u+x test.sh首先,linux随机启动的服务程序都在/etc/init.d这个文件夹里,里面的文件全部都是脚本文件(脚本程序简单的说就是把要运行的程序写到一个文件里让系统能够按顺序执行,类似windows下的autorun.dat文件),另外在/etc这个文件夹里还有诸如名为rc1.d, rc2.d 一直到rc6.d的文件夹,这些都是linux不同的runlevel,我们一般进入的X windows多用户的运行级别是第5级,也就是rc5.d,在这个文件夹下的脚本文件就是运行第5级时要随机启动的服务程序。
需要注意的是,在每个rc (1-6).d文件夹下的文件其实都是/etc/init.d 文件夹下的文件的一个软连接(类似windows中的快捷方式),也就是说,在 /etc/init.d 文件夹下是全部的服务程序,而每个rc(1-6).d只链接它自己启动需要的相应的服务程序!要启动scim(某一程序),我们首先要知道scim程序在哪里,用locate命令可以找到,scim 在/usr/bin/scim这里,其中usr表示是属于用户的,bin在linux里表示可以执行的程序。
这样,我就可以编写一个脚本程序,把它放到/etc/init.d里,然后在rc5.d里做一个相应的软链接就可以了。
这个脚本其实很简单,就两行:#!/bin/bash/usr/bin/scim第一行是声明用什么终端运行这个脚本,第二行就是要运行的命令。
还需要注意的一点是,在rc5.d里,每个链接的名字都是以S或者K开头的,S开头的表示是系统启动是要随机启动的,K开头的是不随机启动的。
这样,你就可以知道,如果我要哪个服务随机启动,就把它名字第一个字母K改成S就可以了,当然,把S改成K后,这个服务就不能随机启动了。
因此,我这个链接还要起名为SXXX,这样系统才能让它随机启动。
在MySQL的管理过程中,偶尔会遇到一些PC Server宕机或者重启,这时我需要在主机启动后再将MySQL服务启动。
一般情况下,这项工作都是简单的。
但是,当面临上百台或者更多的MySQL主机的时候,这种“偶尔”可能会很多,这种“偶尔”还会在半夜或者凌晨发生,如果每次都手动操作,这是很繁琐的。
更重要的是,如果因此而打断了凌晨的美梦是不值得的。
要实现随开启自动启动mysqld,我们需要搞定如下几个问题:1. Linux开机自动启动脚本放在哪儿?一般的,作为服务器使用的Linux一般会以“完全多用户模式(Multi-User Mode with Networking)”级别来启动,这种情况下Linux在启动时会运行/etc/rc.d/rc3.d/下的全部脚本。
例如我们在这个目录下会看到脚本”/etc/rc.d/rc3.d/S90crond”,意味着开机启动时会运行S90crond脚本。
2. Linux如何运行这些脚本?既然已经知道自动启动脚本该放在哪儿了,一切就好办。
我们只需要将一个启动MySQL 的脚本放过去就好了。
下面是我们的一个简单的启动脚本v0.1 mysqldauto$vi mysqldauto#!/bin/sh# Version: 0.1 by orczhou@/opt/mysql/bin/mysqld_safe --user=mysql & #这里需要修改为你的mysqld_safe目录$chmod +x mysqldauto$mv mysqldauto /etc/rc.d/init.d/$ln -s /etc/rc.d/init.d/mysqldauto /etc/rc.d/rc3.d/S99mysqld这样我们就把创建的mysqldauto脚本放到了/etc/rc.d/rc3.d/下面(注意这里使用了link的方式),mysqld可以自动启动了。
这有两个问题需要解释:* * * * * 为什么不直接在目录/etc/rc.d/rc3.d/下创建文件,而要创建一个软连接?这并不是必须的。
但是这样做是有很多好处的(后面会解释),不过这样做至少会看起来更加专业。
* * * * * 为什么文件名要用S99mysqld?这是规则,在rc3.d下面的脚本如果以字母S 开头,那么执行时Linux会给它传递一个start参数(如果以字母K开头,则会传递stop 参数);S后面接个数字,表示了这个脚本的启动顺序,如果目录rc3.d下还有S98*那么它会在S99之前运行。
(看到这儿,你可以猜测一下前面我们为什么要创建软连接了)好了,自此你的mysqld就已经可以随Linux开机自动启动了。
3. 怎样做更专业些?上面这样做,已经可以解决问题了,不过写法多少有些“山寨”,下面我们看看怎样改造一下。
* * * * * 改造1:处理参数start。
既然前面提到以字母S开头的脚本会自动传递一个参数start,K则会传递stop。
那么我再做如下修改:$vi mysqldauto#!/bin/sh# Version: 0.2 by orczhou@MYSQLHOME=/opt/mysql #这里需要修改为你的mysql安装目录if [ $# -ge 1 ];thenmysqldProc=`ps -ef|grep -E "mysqld.+safe"|grep -v "grep"|wc -l`if [ $1 = "stop" ] ;thenif [ $mysqldProc -eq 1 ];then$MYSQLHOME/bin/mysqladmin -uroot shutdownfielif [ $1 = "start" ];thenif [ $mysqldProc -eq 0 ];then$MYSQLHOME/bin/mysqld_safe --user=mysql &fififi做了如此改造后,我们脚本需要接收两个参数start stop了。
如果你想让你mysqld在关闭主机的时候自动关闭,那么stop参数就可以起作用了:$ln -s /etc/rc.d/init.d/mysqldauto /etc/rc.d/rc0.d/K20mysqld这里做软连接好处就体现出来了,启动和关闭只需要用一个脚本就可以了。
* * * * * 改造2:当你面临几十上百台主机的时候,MySQL的启动参数可能会不一样,例如备库启动时可能需要mysqld_safe –user=mysql –read_olny=1 &,这种情况怎么办呢?这里提供一个解决思路。