设置Linux开机自动运行脚本
Linux—添加开机启动(服务脚本)

Linux—添加开机启动(服务脚本)系统启动时需要加载的配置⽂件/etc/profile、/root/.bash_profile/etc/bashrc、/root/.bashrc/etc/profile.d/*.sh、/etc/profile.d/lang.sh/etc/sysconfig/i18n、/etc/rc.local(/etc/rc.d/rc.local)⼀、修改开机启动⽂件:/etc/rc.local(或者/etc/rc.d/rc.local)# 1.编辑rc.local⽂件[root@localhost ~]# vi /etc/rc.local# 2.修改rc.local⽂件,在 exit 0前⾯加⼊以下命令。
保存并退出。
/etc/init.d/mysqld start # mysql开机启动/etc/init.d/nginx start # nginx开机启动supervisord -c /etc/supervisor/supervisord.conf # supervisord开机启动/bin/bash /server/scripts/test.sh >/dev/null2>/dev/null# 3.最后修改rc.local⽂件的执⾏权限[root@localhost ~]# chmod +x /etc/rc.local[root@localhost ~]# chmod755 /etc/rc.local⼆、⾃⼰写⼀个shell脚本将写好的脚本(.sh⽂件)放到⽬录 /etc/profile.d/ 下,系统启动后就会⾃动执⾏该⽬录下的所有shell脚本。
三、通过chkconfig命令设置# 1.将(脚本)启动⽂件移动到 /etc/init.d/或者/etc/rc.d/init.d/⽬录下。
(前者是后者的软连接)mv /www/wwwroot/test.sh /etc/rc.d/init.d# 2.启动⽂件前⾯务必添加如下三⾏代码,否侧会提⽰chkconfig不⽀持。
linux开机启动设置的几种方法

linux开机启动设置的⼏种⽅法Linux开机⾃启动的⼏种⽅式:1.chkconfig以supervisord服务脚本为例:第1步:把上⾯的脚本放在/etc/init.d/⽂件ln -s ./supervisord /etc/init.d/supervisord 第2步:将启动脚本权限改为可执⾏。
chmod a+x /etc/init.d/supervisord 第3步:添加启动项。
chkconfig --add supervisordchkconfig supervisord on 第4步:检查是否设置成功。
chkconfig --list | grep supervisordsupervisord 0:关闭 1:关闭 2:启⽤ 3:启⽤ 4:启⽤ 5:启⽤ 6:关闭2、⼿动配置在⽂件中加⼊启动命令/etc/rc.local3、⽂件指向路径是/etc/init.d下的脚本⽂件/etc/rc[0-6].d0-6是linux操作系统的运⾏级别,运⾏runlevel查看当前运⾏级运⾏级别0:系统停机状态,系统默认运⾏级别不能设为0,否则不能正常启动运⾏级别1:单⽤户⼯作状态,root权限⽤户,⽤于系统维护,禁⽌远程登陆运⾏级别2:多⽤户状态(没有NFS)运⾏级别3:完全的多⽤户状态(有NFS),登陆后进⼊控制台命令⾏模式运⾏级别4:系统未使⽤,保留运⾏级别5:X11控制台,登陆后进⼊图形GUI模式运⾏级别6:系统正常关闭并重启,默认运⾏级别不能设为6,否则不能正常启动/etc/rc[0-6].d⽬录下⽂件的命名规则:S|K + nn + scriptS|K,S开头命名的是开机要执⾏的脚本,K开头命名的是关机要执⾏的脚本nn取值0-100,表⽰优先级,数字越⼤,优先级越低script是软链接指向的脚本的⽂件名/etc/init.d⽬录下的控制脚本接受参数-- start //启动-- stop //停⽌-- restart //重启-- status //状态-- force-reload //重新载⼊配置update-rc.d命令为/etc/init.d⽬录下的脚本建⽴或删除到/etc/rc[0-6].d的软链接增加⼀个服务添加这个服务并让它开机⾃动执⾏update-rc.d apache2 defaults并且可以指定该服务的启动顺序:update-rc.d apache2 defaults 90还可以更详细的控制start与kill顺序:update-rc.d apache2 defaults 20 80其中前⾯的20是start时的运⾏顺序级别,80为kill时的级别。
Linux系统重启脚本使用Shell脚本实现对Linux系统的定时重启和自动恢复

Linux系统重启脚本使用Shell脚本实现对Linux系统的定时重启和自动恢复Linux系统是一种广泛使用的操作系统,它在服务器和嵌入式设备中得到了广泛应用。
在实际运行过程中,为了确保系统的正常运行和稳定性,定时重启和自动恢复是必不可少的功能。
本文将介绍如何使用Shell脚本来实现对Linux系统的定时重启和自动恢复。
实施定时重启功能的第一步是创建一个Shell脚本。
通过使用Linux 的定时任务工具cron,我们可以在指定的时间自动运行这个脚本。
打开终端,输入以下命令创建一个新的脚本文件:```shell$ sudo nano restart.sh```接下来,我们需要编写重启脚本的内容。
在脚本中,我们将使用`shutdown`命令来实现重启功能。
以下是一个示例脚本:```shell#!/bin/bashshutdown -r now```保存并关闭文件。
接下来,我们需要为脚本添加执行权限:```shell$ sudo chmod +x restart.sh```现在,我们可以使用cron来设置定时任务。
通过运行以下命令,我们可以编辑当前用户的cron表:```shell$ crontab -e```在cron表中,每行代表一个定时任务。
按下`i`键进入编辑模式,然后添加以下行来设置每天重启的时间:```30 2 * * * /path/to/restart.sh```这样,每天的凌晨2点30分,系统将自动重启。
修改完成后,按下`Esc`键,然后输入`:wq`保存并退出。
现在,我们已经完成了定时重启功能的设置。
从现在起,系统将在指定时间自动执行重启。
另外,为了确保系统在重启后能够自动恢复到之前的状态,我们还可以编写一个自动恢复脚本。
该脚本将在系统重启后自动运行,并执行一系列操作以将系统恢复到正常状态。
继续使用前面创建的`restart.sh`脚本,我们可以在其中添加自动恢复的操作。
以下是一个示例脚本:```shell#!/bin/bash# 这里是自动恢复的操作```在具体的自动恢复操作中,您可以根据实际需求执行需要的命令和操作,比如恢复数据库、重启服务等。
Linux定时任务与开机自启动脚本(cron与crontab)

Linux定时任务与开机⾃启动脚本(cron与crontab)开机⾃启动脚本⽹上常见的脚本开机⾃启⽅法是:假设要⾃启的脚本位于 /home/user/test.sh给脚本可执⾏的权限sudo chmod +x /home/user/test.sh将脚本⽂件放到 /etc/init.d/ ⽬录下sudo cp /home/user/test.sh /etc/init.d链接到/etc/rc.d/sudo ln -s /etc/init.d/start_my_app /etc/rc.d/这样在新的diban系统中可能不能⽣效,要LSB 兼容之类,脚本还要提供start, stop, restart, force-reload,等命令,具体参考因此这⾥推荐使⽤另外⼀种超级简单的⽅法:bash中输⼊(推荐以管理员的状态)crontab -e第⼀次使⽤这个的话,会提⽰选择⼀种编辑器,根据个⼈喜好选择吧。
然后就会进⼊对应编辑器的编辑界⾯,另起⼀⾏输⼊@reboot /home/user/test.shreboot 后⾯即脚本⽂件位置,然后保存即可。
Ok,脚本现在已经会在开机时⾃动运⾏了。
定时任务同样的bash⾥输⼊ crontab -e然后编辑界⾯加上具体的命令语句。
基本语法为# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed⽐如:每天的凌晨4点半运⾏test.sh脚本30 04 * * * /home/user/test.sh每周的周⼀17:30执⾏test.sh脚本30 17 * * 1 /home/user/test.sh或间隔15分钟执⾏⼀次test.sh脚本*/15 * * * * /home/user/test.sh这个指在9:05 ⾄17:05的范围内,每个钟头的过5分会运⾏⼀次,⽐如10:05、11:05会运⾏05 09-17 * * * /home/user/test.sh关于bash中输⼊service --status-all会发现有个cron,。
linux设置systemctl启动脚本

linux设置systemctl启动脚本centos 7 服务的systemctl 脚本⼀般存在:/usr/lib/systemd⽬录。
⽬录下⼜分为system,和user之分,/usr/lib/systemd/system #系统服务,开机不需要登陆就能运⾏的程序(相当于开启⾃启)+/usr/lib/systemd/user #⽤户服务,需要登录后才能运⾏的程序⽬录下⼜存在两种类型的⽂件:*.service #服务unit⽂件*.target #开机级别unitcentos7 的每⼀个服务以。
service 结尾,⼀般分为3部分:【unit】、【service】、【install】[Unit] # 主要是服务说明Description=test # 简单描述服务After=network.target # 描述服务类别,表⽰本服务需要在network服务启动后在启动Before=xxx.service # 表⽰需要在某些服务启动之前启动,After和Before字段只涉及启动顺序,不涉及依赖关系。
[Service] # 核⼼区域Type=forking # 表⽰后台运⾏模式。
User=user # 设置服务运⾏的⽤户Group=user # 设置服务运⾏的⽤户组KillMode=control-group # 定义systemd如何停⽌服务PIDFile=/usr/local/test/test.pid # 存放PID的绝对路径Restart=no # 定义服务进程退出后,systemd的重启⽅式,默认是不重启ExecStart=/usr/local/test/bin/startup.sh # 服务启动命令,命令需要绝对路径PrivateTmp=true # 表⽰给服务分配独⽴的临时空间[Install]WantedBy=multi-user.target # 多⽤户字段说明Type类型有:simple(默认):#以Execstart字段启动的进程为主进程forking:#Execstart 字段以fox()⽅式启动,,此时⽗进程将退出,⼦进程将成为主进程(后台运⾏),⼀般都设置为forking oneshot : #类似于simple,但只执⾏⼀次,systemd会等他执⾏完,才执⾏其他服务dbus: #类似于simple,但会等待D—Bus信号后启动notify: #类似与simple ,但结束后会发出通知信号,然后systemd才启动其他服务idle: #类似与simple,但要等到其他任务都执⾏完,才启动该服务EnvironmentFile:指定配置⽂件,和连词号组合使⽤,可以避免配置⽂件不存在的异常。
linux自动重启

linux自动重启1、设置开机自动启动crond计划任务服务。
在/etc/rc.d/rc.local这个脚本的末尾加上:/sbin/servicecrondstart关于crond服务的重启、停止等命令如下/sbin/servicecrondstart//启动服务/sbin/servicecrondstop//关闭服务/sbin/servicecrondrestart//重启服务/sbin/servicecrondreload//重新载入配置2、语法如下:示例:每天5:30执行ls命令,并把结果输出到/jp/test文件中305***ls>/jp/test2>&1*/15****ls每15分钟继续执行一次ls命令3、编辑计划任务1、在命令行输入:crontab-e然后添加相应的任务,wq存盘退出。
2、直接编辑/etc/crontab文件,即vi/etc/crontab,添加相应的任务1122110*rm-rf/mnt/fb4、crond服务的一些常用参数cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:crontab-u//预设某个用户的cron服务,通常root用户在继续执行这个命令的时候须要此参数crontab-l//列出某个用户cron服务的详细内容crontab-r//删除没个用户的cron服务crontab-e//编辑某个用户的cron服务比如说root查阅自己的cron设置:crontab-uroot-l再比如,root想要删掉fred的cron设置:crontab-ufred-r比如编辑root用户的crontd服务,则输出:crontab-urootce关于计划任务综合篇二、cron服务上面已经直观了解了cron的一些进程和掌控。
下面我们去看一看cron怎么同时实现。
相对与at,cron的优点就是能够周期性的执行某个命令,at却只能执行一次cron的后台进程名字就是crond,cron也就是systemv的服务,所以我们可以servicecrondstart|stop去启动和停用此服务,也可以采用chkconfig或者ntsysv去挑选cron服务的预设打开,这些命令在以前我们都谈过的#crontab-e编辑当前用户的cron表#crontab-l查阅当前用户的cron表中#crontab-r删除当前用户的cron进程#crontab-u用户名以某用户的身份去掌控cron表中还有个重要的知识点,就是当用户的计划任务建立后是存放在/var/spool/cron这个目录当采用crontab-e编辑当前用户的cron表后,可以发生一个vi文件,cron的格式就是这样的。
linux开机自启动命令
linux开机自启动命令用户想要在linux开机的时候自启动相关的程序。
那我们要怎么设置呢?下面由店铺为大家整理了linux下开机自启动命令的相关知识,希望对大家有所帮助!linux下开机自启动命令1.开机启动时自动运行程序Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。
init根据配置文件继续引导过程,启动其它进程。
通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。
例如:编辑/etc/rc.d/rc.local 文件,在文件最末加上一行"xinit"或"startx",可以在开机启动后直接进入X-Window。
扩展:其他情况下linux自启动程序命令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 命令来建立、修改、删除这些命令文件。
Linux设置程序开机自启动
Linux设置程序开机⾃启动注意:作者测试时,Linux版本为RedHat6,同时应⽤在CentOS6应该也可以(作者未实测,但有同事在CentOS6上使⽤可⾏),系统版本的不同,可能造成操作上的差异(CentOS7就与CentOS6有较⼤的不同),但具体的思路可借鉴。
以下操作均在root权限下Linux下配置某个服务的开机⾃启动,分为两种情况:⼀种是已经挂载的,另⼀种是未挂载的。
已经挂载的程序可以使⽤ chkconfig命令查到运⾏等级,如httpd服务执⾏命令:#chkconfig --list |grep httpd打印信息:httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off未挂载的程序,不会打印任何信息,如Tomcat执⾏chkconfig --list |grep tomcat,没有打印任何信息⼀,已挂载程序开机⾃启动以httpd服务举例。
在root⽤户下打开⼀个终端。
执⾏命令:chkconfig --list |grep httpd可以看到0~6都是off。
执⾏命令:# chkcongfig httpd on执⾏命令:chkconfig --list |grep httpd执⾏完chkcongfig httpd on后,2~5对应的值变成了on.此时我们通过service httpd status 查看http服务状态,是stopped状态,没有开机⾃启动,此时我们重启Linux电脑,再来查看httpd服务是否开机启动重启Linux,查看httpd服务状态:service httpd status,可以看到httpd服务已经启动知识扩展:执⾏chkcongfig httpd on 可以加--level参数,指定将0~6哪些级别开启,命令格式如下:# chkcongfig --level 345 httpd on345就是需要开启(由off变成on)的数字,⽽不加—level参数时,默认打开的是2~50~6对应的运⾏级别如下:Linux系统有7个运⾏级别(runlevel)运⾏级别0:系统停机状态,系统默认运⾏级别不能设为0,否则不能正常启动运⾏级别1:单⽤户⼯作状态,root权限,⽤于系统维护,禁⽌远程登陆运⾏级别2:多⽤户状态(没有NFS)运⾏级别3:完全的多⽤户状态(有NFS),登陆后进⼊控制台命令⾏模式运⾏级别4:系统未使⽤,保留运⾏级别5:X11控制台,登陆后进⼊图形GUI模式运⾏级别6:系统正常关闭并重启,默认运⾏级别不能设为6,否则不能正常启动⼆、未挂载程序开机⾃启动未挂载的程序开机⾃启动实现⽅式是编写程序启动的.sh脚本,再将此脚本挂载到Linux系统上,让它开机执⾏,启动程序。
Linux系统如何设置开机自动运行脚本
在Windows 下,我们有很多方法可以设置开机启动,但在Linux 系统下我们需要如何操作呢?Linux 下同样可以设置开机启动,但可能需要我们敲一些命令(可能也有 UI 界面的设置方法,但我不熟,我更多是玩命令)。
下面我们就介绍三种简单但可行的开机启动设置方法。
方法一:修改/etc/rc.d/rc.local 文件/etc/rc.d/rc.local文件会在 Linux 系统各项服务都启动完毕之后再被运行。
所以你想要自己的脚本在开机后被运行的话,可以将自己脚本路径加到该文件里。
但是,首先需要确认你有运行这个文件的权限。
$ chmod +x /etc/rc.d/rc.local为了演示,我们创建了一个脚本,当它被执行之后,将在家目录下写入有特定信息的文件。
$ vim auto_run_script.sh#!/bin/bashdate >> /home/alvin/output.txthostname >> /home/alvin/output.txt保存退出后,再给它赋予可执行权限:$ chmod +x auto_run_script.sh然后,我们再将脚本添加到/etc/rc.d/rc.local文件最后一行:$ vim /etc/rc.d/rc.local/home/alvin/auto_run_script.sh接下来,我们就可以试试效果了。
直接重启系统就可以了:$ sudo reboot重启之后,就会在家目录下看到脚本执行的结果了。
方法二:使用crontab大家知道,crontab 是 Linux 下的计划任务,当时间达到我们设定的时间时,可以自动触发某些脚本的运行。
我们可以自己设置计划任务时间,然后编写对应的脚本。
但是,有个特殊的任务,叫作@reboot,我们其实也可以直接从它的字面意义看出来,这个任务就是在系统重启之后自动运行某个脚本。
那它将运行的是什么脚本呢?我们如何去设置这个脚本呢?我们可以通过crontab -e来设置。
LINUX系统中设置开机自动执行命令
LINUX系统中设置开机⾃动执⾏命令###1、开机⾃动执⾏命令配置⽂件位置[root@wx-local01 ~]# cd /etc/rc.d/[root@wx-local01 rc.d]# ls -l /etc/rc.d/总⽤量4drwxr-xr-x. 2 root root 107 9⽉510:40 init.ddrwxr-xr-x. 2 root root 45 11⽉172020 rc0.ddrwxr-xr-x. 2 root root 45 11⽉172020 rc1.ddrwxr-xr-x. 2 root root 45 11⽉172020 rc2.ddrwxr-xr-x. 2 root root 72 5⽉2614:02 rc3.ddrwxr-xr-x. 2 root root 72 5⽉2614:02 rc4.ddrwxr-xr-x. 2 root root 72 5⽉2614:02 rc5.ddrwxr-xr-x. 2 root root 45 11⽉172020 rc6.d-rwxr-xr-x. 1 root root 881 5⽉2716:06 rc.local[root@wx-local01 rc.d]# tree /etc/rc.d//etc/rc.d/├── init.d│├── functions│├── mysql -> /home/wx/mysql/support-files/mysql.server│├── netconsole│├── network│├── README│└── syschronzed_date├── rc0.d│├── K50netconsole -> ../init.d/netconsole│└── K90network -> ../init.d/network├── rc1.d│├── K50netconsole -> ../init.d/netconsole│└── K90network -> ../init.d/network├── rc2.d│├── K50netconsole -> ../init.d/netconsole│└── S10network -> ../init.d/network├── rc3.d│├── K50netconsole -> ../init.d/netconsole│├── S10network -> ../init.d/network│└── S63syschronzed_date -> ../init.d/syschronzed_date├── rc4.d│├── K50netconsole -> ../init.d/netconsole│├── S10network -> ../init.d/network│└── S63syschronzed_date -> ../init.d/syschronzed_date├── rc5.d│├── K50netconsole -> ../init.d/netconsole│├── S10network -> ../init.d/network│└── S63syschronzed_date -> ../init.d/syschronzed_date├── rc6.d│├── K50netconsole -> ../init.d/netconsole│└── K90network -> ../init.d/network└── rc.local8 directories, 24 files2、设置开机⾃启动命令[root@wx-local01 rc.d]# vim /etc/rc.d/rc.local#!/bin/bash# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES## It is highly advisable to create own systemd services or udev rules# to run scripts during boot instead of using this file.## In contrast to previous versions due to parallel execution during boot# this script will NOT be run after all other services.## Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure# that this script will be executed during boot.touch /var/lock/subsys/local#开机执⾏脚本启动harborsh /scripts/shell/start_harbor/power_on_self_starting_harbor.sh3、设置执⾏权限【不设置执⾏权限,启动后不执⾏⽂件中内容】[root@wx-local01 rc.d]# chmod +x /etc/rc.d/rc.local###。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设置Linux开机自动运行脚本
参考资料
实现目标:在Linux启动时,自动运行位于普通用户test1根目录下的脚本程序test.py,该程序会在每次执行时自动向本地日志文件追加一条记录,源码如下:
fromdatetime import datetime
now=datetime.now()
f=open('test.log','a')
f.write('%s '%now)
f.close()
Linux在启动时,会自动执行/etc/rc.d目录下的初始化程序,因此我们可以把启动任务放到该目录下,有两种办法:
方案一:
1、因为其中的rc.local是在完成所有初始化之后执行,因此我们可以把启动脚本写到里面
2、用root账号登陆Linux,vi /etc/rc.d/rc.local编辑文件,在最后加入两行需要执行的脚本程序:
cd /home/test1 --该步不可少,否则会提示没有权限打开'test.log'文件
su test1 -c "python /home/test1/test.py" --把要执行的命令作为一个参数传递级su 方案二:
1、init.d目录下都为可执行程序,他们其实是服务脚本,按照一定格式编写,Linux 在启动时会自动执行,类似Windows下的服务
2、用root帐号登录,vi /etc/rc.d/init.d/mystart,追加如下内容:
#!/bin/bash
#chkconfig:2345 80 05 --指定在哪几个级别执行,0一般指关机,
6指的是重启,其他为正常启动。
80为启动的优先级,05为关闭的优先机
#description:mystart service
RETVAL=0
start(){ --启动服务的入口函数
echo -n "mystartserive ..."
cd /home/test1
su test1 -c "python /home/test1/test.py"
}
stop(){ --关闭服务的入口函数
echo "mystart service is stoped..."
}
case $1 in --使用case,可以进行交互式操作
start)
start
;;
stop)
stop
;;
esac
exit $RETVAL
3、运行chmod +r /etc/rc.d/init.d/mystart,使之可直接执行
4、运行chkconfig --add mystart,把该服务添加到配置当中
5、运行chkconfig --list mystart,可以查看该服务进程的状态
总结:
两种方案的的核心都是切换用户到test1,然后执行命令启动Python程序,做成服务的好处是可以定义多个交互命令,比
如:start,stop,restart,reset...,在服务运行的过程中还可以做相应操作。
最开始的时候,我按照一般的思路写了如下脚本,却怎
么也执行不了:
su test1 --切换到test1用户
cd /home/test1 --切换到根目录
python test.py --执行python程序
exit --退出test1帐号
看起来好象一切都没错,但是发现只运行了第一行的命令,后面的都没有运行,直到退出test1用户后才发现好象执行完毕。
分析原因,
是因为Linux启动的时候是在root帐号下,执行su
test1等于打开了一个新的shell脚本,因此下面的代码都在等着新的Shell脚本结束才能运行,就象在主程序里调用了一个子程序,而子程序是个死
循环,一下出来来结果下面的要等死了。
知道了发生的原因,那么解决的办法就相对简单了,就是在执行上述脚本程序时,不要离开本身的Shell。
我们可以把
执行命令做为su的一个参数传递进去,因为没有涉及到打开新的Shell,因此可以正常执行你期望的脚本程序,顺利实现开机自动启动指定的脚本程序。
实例操作:
(在CentOS5.8启动、停止及重新启动 Helix server 11 for Linux 服务测试成功)
随Linux启动时自动启动HelixServer服务,HelixServer安装目录:/var/HelixServer/ 启动脚本:
#cd //var/HelixServer
#./Bin/rmserverrmserver.cfg& //后台启动HelixServer服务
#cat ./Logs/rmserver.pid //查看HelixServer进程号
#kill 在此输入查看到的进程号
创建一个启动、停止或重新启动HelixServer服务脚本helixserver:
1、用root帐号登录,vi /etc/init.d/helixserver,追加如下内容:
#!/bin/bash
#chkconfig:2345 80 05 --指定在哪几个级别执行,0一般指关机,
6指的是重启,其他为正常启动。
80为启动的优先级,05为关闭的优先级
#description:helixserver service
#helixserver –f /var/HelixServer/Bin/rmserver || exit 0
case "$1" in
start)
echo -n "Starting HelixServer:rmserver"
cd /var/HelixServer
./Bin/rmserverrmserver.cfg&
echo "."
;;
stop)
echo -n "Stopping HelixServer:rmserver"
pid=`cat /var/HelixServer/Logs/rmserver.pid` //注:`用的是尖角号也就是数字键1左边的那个键
kill $pid
echo "."
;;
restart)
echo -n "Stopping HelixServer:rmserver"
pid=`cat /var/HelixServer/Logs/rmserver.pid` //注:`用的是尖角号也就是数字键1左边的那个键
kill $pid
echo "."
echo -n "Starting HelixServer:rmserver"
cd /var/HelixServer
./Bin/rmserverrmserver.cfg&
echo "."
;;
*)
echo "Usage: /etc/init.d/helixserverstart|stop|restart"
exit 1
;;
esac
2、运行chmod +x /etc/init.d/helixserver,使之可直接执行
3、运行chkconfig --add helixserver,把该服务添加到配置当中
4、创建服务链接,告诉系统在运行级2期间启动helixserver,并在系统关闭以前妥善地停止这个守护进程。
#ln -s /etc/init.d/helixserver /etc/rc2.d/S80helixserver
#ln -s /etc/init.d/helixserver /etc/rc0.d/K80helixserver
#ln -s /etc/init.d/helixserver /etc/rc6.d/K80helixserver
5、运行chkconfig --list helixserver,可以查看该服务进程的状态
开放以下端口:
iptables -I INPUT -p tcp --dport 33333 -j ACCEPT
iptables -I INPUT -p tcp --dport 9999 -j ACCEPT
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
iptables -I INPUT -p tcp --dport 554 -j ACCEPT
iptables -I INPUT -p tcp --dport 1755 -j ACCEPT
也可以直接将以下代码添加到/etc/sysconfig/iptables文件里
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport554 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport1755 -j ACCEPT。