linux开机自动启动开机日志,设置linux开机自动运行脚本

实现目标:在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,可以进行交互式操作

case $1 in

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,因此可以正常执行你期望的脚本程序,顺利实现开机自动启动指定的脚本程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java自定义方法参数注解_Java方法中的参数太多,第1部分:自定义类型

java自定义方法参数注解我认为构造函数和方法中冗长的参数列表是Java开发中的另一个“ 危险信号 ”,就逻辑和功能而言,它们不一定是“错误的”,但通常暗示当前或将来出现错误的可能性很高。 在一小部分帖子中,我介绍了一些可用于减…

5 zabbix 添加host_Zabbix 快速上手——添加 Agent 主机

Zabbix-Server 安装完成之后,下一步需要添加主机才能看到数据。安装Zabbix AgentZabbix Agent 的作用是将服务器的数据发送给 Zabbix Server,所以只需要在需要监控的主机上安装 Zabbix Agent 就够了。因为我的环境是:Ubuntu 18.04、Nginx、My…

linux 编译hadoop,linux centos 安装编译hadoop2.7.1

因为Apache hadoop 只提供了32位的包,所以需要自己编译64位的包,下面是编译步骤所需要的包6:java 1.7下面是具体安装:1:Java安装安装之前请卸载系统自带的jdk,openjdkexport M3_HOME/home/data/app/apache-maven-3.3.9…

使用Spring Data Cassandra缓存的预备语句

今天,我有一篇简短的文章,内容涉及在Spring Data Cassandra中使用Prepared Statements。 Spring为您提供了一些实用程序,使您可以更轻松地使用“预备语句”,而不必依靠自己使用Datastax Java驱动程序手动注册查询。 Spring代码提供…

域名是如何被墙的_如何快速搭建属于自己的个性网站?

说明一直以来都是用GithubPage搭建的博客,因为服务器在国外,访问速度一直比较慢,再后来有一批服务器被墙掉了导致国内网络环境直接无法访问。这里可以多说一句,GithubPage跟Github用的可以不是同一IP地址服务器,被墙很…

linux内核函数open源码,open()在Linux内核的实现(1)-基本实现

原标题:open()在Linux内核的实现(1)-基本实现1.基本说明在用户态使用open()时,必须向该函数传入文件路径和打开权限。这两个参数传入内核后,内核首先检查这个文件路径存在的合法性,同时还需检查使用者是否有合法权限打开该文件。如…

php禁止代理ip访问_php禁止某ip或ip地址段访问的方法

本文实例讲述了php禁止某ip或ip地址段访问的方法,分享给大家供大家参考。具体分析如下:因为还没有深入学习Apache和nginx 所以用PHP写了一个可以禁用地址的小程序使用时只需:即可禁用单个ip如下://禁用ip地址$ip$_SERVER["RE…

嵌入式linux图形系统设计,轻量级嵌入式Linux图形系统设计与实现

摘要:图形用户界面(GUI)是人机交互界面(MMI)的重要表现形式,它不仅提供了丰富的图像信息,而且提高了用户同嵌入式设备的交互效率。随着嵌入式技术的广泛应用和嵌入式硬件的快速发展,人们对嵌入式设备的需求日益增多,嵌入式图形用户界面的作用也越来越重要。 大多数嵌…

无服务器-构建现代应用程序的新方法

对无服务器/功能即服务/云功能技术感到好奇,但是还没有机会深入研究? 想知道所有的兴奋是什么? 无服务器并不意味着没有服务器。 这是构建现代应用程序的新方法。 观看此视频,以了解有关构建现代应用程序的这种新方法的更多信息。…

linux 查看其他磁盘分区,Linux 查看磁盘分区.pdf

Linux 查看磁盘分区作者:北南南北来自:LinuxSir.Org的,不仅仅是查看磁盘的分区表,而且也能进行磁盘分区的操作;但在本文,我们只讲磁盘分区的查看,以及分区的使用情况的查看;本文只是…

python 对象锁_也许你对 Python GIL 锁的理解是 错的。

摄影:产品经理甜白与草莓更配~我刚到现在这个公司时,听到当时一个高级工程师(现已离职)大声地跟他旁边的同事说:Python 有 GIL 锁,所以它的多线程实际上是单线程,所以写多线程代码不用考虑线程冲突,不用加…

linux下强制取消nfs挂载目录,强制卸载无响应的nfs挂载目录

强制卸载无响应的nfs挂载目录在日常的运维中, 经常有需要使用 nfs 挂载远程服务器目录的需求, 但是照我个人实际使用的经验来看, nfs 并不是"一劳永逸", 故障率还是蛮高的, 其中最长遇到的就是由于网络原因/远程 nfs 服务器原因或其他原因导致的 nfs 客户端与 nfs 服…

animals中文谐音_Animals谐音歌词,Maroon5《animals》英语歌曲中文音译

歌词谐音:Maroon 5《Animals(野性)》-音吧网英语歌曲谐音歌词中文音译原创词:本尼布兰克曲:亚当莱文,本尼布兰科,谢尔贝克,史奇雷克斯所属专辑:《冰雪奇缘》电影原声带音吧网-www.yinbawang.com…

服务性服务–服务到服务的通话

在上一篇文章中,我介绍了如何使用Knative的 Serving功能来运行示例Java应用程序。 这篇文章将介绍部署两个应用程序的步骤,其中一个应用程序调用另一个。 样品细节 整个示例可在我的github存储库中找到– https://github.com/bijukunjummen/sleuth-webf…

linux cookie 地址,SYN Cookie原理及其在Linux内核中的实现

在目前以IPv4为支撑的网络协议上搭建的网络环境中,SYN Flood是一种非常危险而常见的DoS攻击方式。到目前为止,能够有效防范SYN Flood攻击的手段并不多,而SYN Cookie就是其中最著名的一种。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明…

maya中英文对比_maya中英文对照表

1File文件New Scene建立新场景Open Scene打开场景Save Scene存盘场景Save Scene As改名存盘Import导入Export All导出所有Export Selection导出选定物体View Image查看图片View Sequence浏览顺序Create Reference引入场景文件Reference Editor引入场景编辑器Project项目New建立…

linux vmcore 分析,crash分析vmcore

然后进入 /var/crash/ 找到相应的vmcore执行crash 127.0.0.1-2014-01-21-23\:36\:14/vmcore /usr/lib/debug/lib/modules/2.6.32-902.279.9.1.***.el6.x86_64/vmlinux输出如下:KERNEL: /usr/lib/debug/lib/modules/2.6.32-902.279.9.1.***.el6.x86_64/vmlinuxDUM…

用置换破坏您的JUnit5测试

编写JUnit测试可能是一个乏味而乏味的过程。 了解如何使用排列结合TestFactory方法和DynamicTest对象以最少的编码工作来改进测试类。 在本文中,我将使用Java流ORM Speedment,因为它包含一个现成的Permutation类,从而帮助我节省了开发时间。…

es6 遍历数组对象获取所有的id_ES6对象遍历Object.keys()方法

【Object.keys()】ES5 引入了Object.keys()方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名var obj { foo: bar, baz: 42 };console.log(Object.keys(obj));// ["foo", "baz"]ES2017 引入了跟…

servlet异步_如何使用异步Servlet来提高性能

servlet异步这篇文章将描述一种性能优化技术,该技术适用于与现代Web应用程序相关的常见问题。 如今的应用程序不再只是被动地等待浏览器发起请求,而是希望自己开始通信。 一个典型的示例可能涉及聊天应用程序,拍卖行等–共同点是这样一个事实…