linux自启动c程序linux伊甸园
下面用自启动apache为例自启动脚本usrlocalapache2binapachectlstart文件位于etcrcdinitd下名为apached注意要可执行chmodxetcrcdinitdapached设置文件的属性为可执行ln-setcrcdinitdapachedetcrc3dS90apache建立软连接快捷方式ln-setcrcdinitdapachedetcrc0dK20apache在RedHatLinux中自动运行程序1.开机启动时自动运行程序Linux加载后它将初始化硬件和设备驱动然后运行第一个进程initinit根据配置文件继续引导过程启动其它进程通常情况下修改放置在etcrc或etcrcd或etcrcd目录下的脚本文件可以使init自动启动其它程序例如编辑etcrcdrclocal文件在文件最末加上一行quotxinitquot或quotstartxquot可以在开机启动后直接进入X-Window2.登录时自动运行程序用户登录时bash首先自动执行系统管理员建立的全局登录scriptetcprofile然后bash在用户起始目录下按顺序查找三个特殊文件中的一个bash_profilebash_loginprofile但只执行最先找到的一个因此只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序类似于DOS下的Autoexecbat3.退出登录时自动运行程序退出登录时bash自动执行个人的退出登录脚本bash_logout例如在bash_logout中加入命令quottar-cvzfcsourcetgz*cquot则在每次退出登录时自动执行quottarquot命令备份*c文件4.定期自动运行程序Linux有一个称为crond的守护程序主要功能是周期性地检查varspoolcron目录下的一组命令文件的内容并在设定的时间执行这些文件中的命令用户可以通过crontab命令来建立修改删除这些命令文件例如建立文件crondFile内容为quot00923Jan*HappyBirthdayquot运行quotcrontabcronFilequot命令后每当元月23日上午900系统自动执行quotHappyBirthdayquot的程序quot*quot表示不管当天是星期几5.定时自动运行程序一次定时执行命令at与crond类似但它只执行一次命令在给定的时间执行但不自动重复at命令的一般格式为at[-ffile]time在指定的时间执行file文件中所给出的所有命令也可直接从键盘输入命令$at1200atgtmailtoRoger-sPrimeHavealunchPrimeltplantxtatgtCtr-DJob1at2000-11-0912002000-11-091200时候自动发一标题为quotHavealunchquot内容为plantxt文件内容的邮件给RogerbinbashRESTARTquotquot里面写相应服务代码STARTquotquotSTOPquotquotcasequot1quotinrestartRESTARTechoquotquotstartSTARTechoquotquotSTOPSTOPechoquotquotechoquotUsage0restartstartstopquotexit1esacexit1脚本写完要修改一下权限chmoduxtestsh首先linux随机启动的服务程序都在etcinitd这个文件夹里里面的文件全部都是脚本文件脚本程序简单的说就是把要运行的程序写到一个文件里让系统能够按顺序执行类似windows下的autorundat文件另外在etc这个文件夹里还有诸如名为rc1drc2d一直到rc6d的文件夹这些都是linux不同的runlevel我们一般进入的Xwindows多用户的运行级别是第5级也就是rc5d在这个文件夹下的脚本文件就是运行第5级时要随机启动的服务程序需要注意的是在每个rc1-6d文件夹下的文件其实都是etcinitd文件夹下的文件的一个软连接类似windows中的快捷方式也就是说在etcinitd文件夹下是全部的服务程序而每个rc1-6d只链接它自己启动需要的相应的服务程序要启动scim某一程序我们首先要知道scim程序在哪里用locate命令可以找到scim在usrbinscim这里其中usr表示是属于用户的bin在linux里表示可以执行的程序这样我就可以编写一个脚本程序把它放到etcinitd里然后在rc5d里做一个相应的软链接就可以了这个脚本其实很简单就两行binbashusrbinscim第一行是声明用什么终端运行这个脚本第二行就是要运行的命令还需要注意的一点是在rc5d里每个链接的名字都是以S或者K开头的S开头的表示是系统启动是要随机启动的K开头的是不随机启动的这样你就可以知道如果我要哪个服务随机启动就把它名字第一个字母K改成S就可以了当然把S改成K后这个服务就不能随机启动了因此我这个链接还要起名为SXXX这样系统才能让它随机启动在MySQL的管理过程中偶尔会遇到一些PCServer宕机或者重启这时我需要在主机启动后再将MySQL服务启动一般情况下这项工作都是简单的但是当面临上百台或者更多的MySQL主机的时候这种ldquo偶尔rdquo可能会很多这种ldquo偶尔rdquo还会在半夜或者凌晨发生如果每次都手动操作这是很繁琐的更重要的是如果因此而打断了凌晨的美梦是不值得的要实现随开启自动启动mysqld我们需要搞定如下几个问题1Linux开机自动启动脚本放在哪儿一般的作为服务器使用的Linux一般会以ldquo完全多用户模式Multi-UserModewithNetworkingrdquo级别来启动这种情况下Linux在启动时会运行etcrcdrc3d下的全部脚本例如我们在这个目录下会看到脚本rdquoetcrcdrc3dS90crondrdquo意味着开机启动时会运行S90crond脚本2Linux如何运行这些脚本既然已经知道自动启动脚本该放在哪儿了一切就好办我们只需要将一个启动MySQL的脚本放过去就好了下面是我们的一个简单的启动脚本v01mysqldautovimysqldautobinshVersion01byorczhougmailcomoptmysqlbinmysqld_safe--usermysqlamp这里需要修改为你的mysqld_safe目录chmodxmysqldautomvmysqldautoetcrcdinitdln-setcrcdinitdmysqldautoetcrcdrc3dS99mysqld这样我们就把创建的mysqldauto脚本放到了etcrcdrc3d下面注意这里使用了link的方式mysqld可以自动启动了这有两个问题需要解释为什么不直接在目录etcrcdrc3d下创建文件而要创建一个软连接这并不是必须的但是这样做是有很多好处的后面会解释不过这样做至少会看起来更加专业为什么文件名要用S99mysqld这是规则在rc3d下面的脚本如果以字母S开头那么执行时Linux会给它传递一个start参数如果以字母K开头则会传递stop参数S后面接个数字表示了这个脚本的启动顺序如果目录rc3d下还有S98那么它会在S99之前运行看到这儿你可以猜测一下前面我们为什么要创建软连接了好了自此你的mysqld就已经可以随Linux开机自动启动了3怎样做更专业些上面这样做已经可以解决问题了不过写法多少有些ldquo山寨rdquo下面我们看看怎样改造一下改造1处理参数start既然前面提到以字母S开头的脚本会自动传递一个参数startK则会传递stop那么我再做如下修改vimysqldautobinshVersion02byorczhougmailcomMYSQLHOMEoptmysql这里需要修改为你的mysql安装目录if[-ge1]thenmysqldProcps-efgrep-Equotmysqldsafequotgrep-vquotgrepquotwc-lif[1quotstopquot]thenif[mysqldProc-eq1]thenMYSQLHOMEbinmysqladmin-urootshutdownfielif[1quotstartquot]thenif[mysqldProc-eq0]thenMYSQLHOMEbinmysqld_safe--usermysqlampfififi做了如此改造后我们脚本需要接收两个参数startstop了如果你想让你mysqld在关闭主机的时候自动关闭那么stop参数就可以起作用了ln-setcrcdinitdmysqldautoetcrcdrc0dK20mysqld这里做软连接好处就体现出来了启动和关闭只需要用一个脚本就可以了改造2当你面临几十上百台主机的时候MySQL的启动参数可能会不一样例如备库启动时可能需要mysqld_safendashusermysqlndashread_olny1amp这种情况怎么办呢这里提供一个解决思路在主机上运行一个脚本探测当前mysqld的启动参数然后写到一个指定的文件里最后在你的启动脚本中读取这个文件里面的启动参数来启动mysqldItworks文章转载自网管之家httpwwwbitscncompdbmysql2htmllinux自启动c程序wps for linux