首页 > 系统相关 >启动、登录、注销时执行Linux脚本

启动、登录、注销时执行Linux脚本

时间:2023-01-13 11:47:45浏览次数:65  
标签:profile systemd 登录 etc es Linux home 注销 bash

问题

启动 Linux 系统并登录的过程中到底发生了什么事情,按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,当你注销或者关机时,也是这样。更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作。

注意:我们假定使用的是 Bash 作为登录及注销的主 Shell。如果你使用的是其他 Shell,那么有些方法可能会无效

启动时执行linux脚本

1、使用cron任务

除了常用格式(分 / 时 / 日 / 月 / 周)外,cron 调度器还支持 @reboot 指令。这个指令后面的参数是脚本(启动时要执行的那个脚本)的绝对路径。

然而,这种方法需要注意两点:

  • a) cron 守护进程必须处于运行状态(通常情况下都会运行)
  • b) 脚本或 crontab 文件必须包含需要的环境变量(如果有的话)

我们可以通过 crontab -e 来设置

$ crontab -e

@reboot /home/alvin/auto_run_script.sh

2、使用/etc/rc.d/rc.local

Linux在启动时,会自动执行/etc/rc.d目录下的初始化程序,因此我们可以把启动任务放到该目录下,/etc/rc.d/目录下的初始化程序很多,rc.local是在完成所有初始化之后执行的,所以在这里做手脚很合适。

init.d目录下都为可执行程序,他们其实是服务脚本,按照一定格式编写,Linux 在启动时会自动执行,类似Windows下的服务。

对于 systemd-based 发行版 Linux 同样有效。不过,使用这个方法,需要授予 /etc/rc.d/rc.local 文件执行权限。

$ vim auto_run_script.sh

#!/bin/bash
date >> /home/alvin/output.txt
hostname >> /home/alvin/output.txt
$ vim /etc/rc.d/rc.local

/home/alvin/auto_run_script.sh

3、使用systemd 服务

本方法仅适用于 systemd 系统。如何区分是不是 systemd 系统?很简单,只需运行 ps aux 命令,查看 pid 为 1 的进程是不是 systemd

我们需要创建一个 systemd 启动服务,并把它放置在 /etc/systemd/system/ 目录下

我们创建的 systemd 启动服务如下。请注意,这时后缀是 .service ,而不是 .sh

$ vim auto_run_script.service

[Unit]
Description=Run a Custom Script at Startup
After=default.target

[Service]
ExecStart=/home/alvin/auto_run_script.sh

[Install]
WantedBy=default.target

从服务的内容可以看出来,我们最终还是会调用 /home/alvin/auto_run_script.sh 这个脚本。

然后,我们再把这个脚本放置在 /etc/systemd/systerm/ 目录下,之后我们再运行下面两条命令来更新 systemd 配置文件,并启动服务。

$ systemctl daemon-reload
$ systemctl enable auto_run_script.service

登录或注销时执行linux脚本

1、分别使用~.bash_profile~.bash_logout文件,在每个文件的底部,添加调用的脚本代码

2、在/etc/profile.d/目录下新建sh脚本,/etc/profile会遍历/etc/profile.d/*.sh

示例:

vi .bash_profile

/home/es/auto_run_script.sh
vi auto_run_script.sh
#!/bin/bash

date >> /home/es/output.txt
hostname >> /home/es/output.txt


nohup /home/es/elk/es/es1/bin/elasticsearch > /home/es/elk/es/es1/nohup.out 2>&1 &
nohup /home/es/elk/es/es2/bin/elasticsearch > /home/es/elk/es/es2/nohup.out 2>&1 &
nohup /home/es/elk/es/es3/bin/elasticsearch > /home/es/elk/es/es3/nohup.out 2>&1 &

nohup /home/es/elk/kibana/kibana-7.10.1-linux-x86_64/bin/kibana > /home/es/elk/kibana/kibana-7.10.1-linux-x86_64/nohup.out 2>&1 &

几个脚本的区别

(1) /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

(2) /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取(即每次新开一个终端,都会执行bashrc)。

(3) ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,设置一些环境变量,执行用户的.bashrc文件。

(4) ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(5) ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是”父子”关系。


(6) ~/.bash_profile: 是交互式、login 方式进入 bash 运行的

(7) ~/.bashrc: 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

参考链接

https://linux.cn/article-8286-1.html

https://blog.csdn.net/kexuanxiu1163/article/details/107437981

https://www.cnblogs.com/pengpengboshi/p/13556006.html

标签:profile,systemd,登录,etc,es,Linux,home,注销,bash
From: https://www.cnblogs.com/lidabo/p/17049147.html

相关文章

  • shiro登录认证过程讲解
    先粘出登录的代码​@RequestMapping(value="/submitLogin",method=RequestMethod.POST)@ResponseBodypublicMap<String,Object>submitLogin(Stringusername,String......
  • linux下设置开机自动运行脚本的5种方法
    话不多说,本文介绍几种方法,希望能够对你的胃口。文章目录 一、编辑/etc/rc.d/rc.local文件 二、crontab计划任务 三、使用systemd,自己写个服务就ok了 四、在/etc/profi......
  • Linux配置网络
    安装Linux完成后,首先要配置网络,确保ping通网关,8.8.8.8以及外网(www.baidu.com)首先要在Windows控制台输入ipconfig查询Vmnet8和本地网络IP地址以及默认网关然后 然后在......
  • 如何成为一名Linux发烧友
    相信如今的人们已经越来越认识到计算机操作的重要性了。在这个互联网飞速发展的时代,离开了计算机操作,我们就等于被折断了一只翅膀。无论是在学习或是工作中,我们都有很多机会......
  • 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第十一章 U-Boot使用实验
    U-Boot使用实验​在移植linux内核之前,我们肯定要先了解U-Boot。因为U-boot是我们的开发板加载引导启动linux内核的必要工具。本章我们讲解U-Boot是什么、有何作用,有哪些命令......
  • 《DFZU2EG_4EV MPSoC之嵌入式Linux开发指南》第十二章 U-Boot移植​
    U-Boot移植​上一章节我们讲解了uboot的使用,对uboot有了一个初步的了解。前两章我们都是使用的正点原子提供的uboot,本章我们就来学习如何将Xilinx官方的uboot移植到正点原子......
  • 小程序用户登录架构设计
      1.背景上一篇文章《小程序静默登录方案设计》提到过,小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。即......
  • Linux数据实时同步(sersync+rsync)
    一、Slave服务器配置1.在Slave服务器上安装Rsync[root@slave~]#rpm-ivhrsync-3.1.2-11.el7_9.x86_64.rpm###rpm自行下载2.在Slave服务器上配置rsync[root@slave......
  • 如何实现小程序静默登录?
      .背景首先谈谈在小程序的开发中,如何借助微信的能力标识一个用户?微信官方提供了两种标识:OpenId是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标......
  • Linux修改/etc/security/limits.conf不生效办法的一个临时解决办法
    故障是Linux出现"Toomanyopenfiles"错误。通过修改/etc/security/limits.conf,提高上限。但是使用ulimit-a显示修改并未生效。可以通过切换到其他用户,如切换到tomcat......