您的位置 首页 产品

在Linux中开机主动运转普通用户脚本程序

测试环境:Fedora7,管理员:root,普通用户:test1实现目标:在Linux启动时,自动运行位于普通用户test1根目录下的脚本程序test.py,该程序会在每次执行时

测验环境:Fedora7,管理员:root,普通用户:test1

实现目标:在Linux发动时,主动运转坐落普通用户test1根目录下的脚本程序test.py,该程序会在每次履行时主意向本地日志文件追加一条记载,源码如下:

from datetime 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 mystart serive …

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,因而能够正常履行你希望的脚本程序,顺利实现开机主动发动指定的脚本程序。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/299571.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部