需求是在关机或者重启之前,可以自定义执行命令。

https://opensource.com/life/16/11/running-commands-shutdown-linux

1) 使用systemd 方式

在 /lib/systemd/system-shutdown/目录下,存放自定义的脚本。

systemd-halt.service

通过 ssh 的 登陆日志

cat auth.log | grep Accepted

if [ ! -f '/root/lastuser.log' ];then

touch /root/lastuser.log

fi

mount -oremount,rw /

LOGIN_IP=who am i | awk '{print $NF}' | sed -e 's/[()]//g'

echo "====================================================" >> /root/lastuser.log

echo "whoami" >> /root/lastuser.log

echo "who -m" >> /root/lastuser.log

echo "who am i" >> /root/lastuser.log

echo "who am i | awk '{print $NF}'" >> /root/lastuser.log

echo " whoami date $LOGIN_IP " >> /root/lastuser.log

mount -oremount,ro /

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ][0-9]+[ ]//" ) [$RETRN_VAL]"'

Additionally you can add the line below to your syslog configuration ( /etc/syslog.conf ) to redirect the local3 messages to a specific file.

local3.* /var/log/prompt.log

今天查看了一个系统初始化的 Shell 脚本,其中有一段命令是配置记录 bash 命令日志的,如下:

LOGIN_IP=$(who am i | awk '{print $NF}')

export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });echo $(date +"%Y-%m-%d %H:%M:%S") [$(whoami)@$SSH_USER$LOGIN_IP pwd ]" $msg" >> /var/log/.history; }'

其中的 PROMPT_COMMAND 是 bash 的环境变量,这个变量的中内容是作为一个普通的 bash 命令执行的,而且执行时间是在 bash 显示 prompt 之前。 这个好理解,就是说每执行一个命令前,PROMPT_COMMAND 里面先执行,然后是 prompt。

但里面的 msg=$(history 1 | { read x y; echo $y; }); 让我迷惑了,现在我来把它拆解,

先来理解 history 1 命令,它的输出总是 $COMMAND_Number history 1, 也就是理解成它的输出总是最后一次执行的命令?

bash 会最先记录下这个命令:history 1 | { read x y; echo $y; }? 接着 history 1 加管道处理后就变成它本身,而不带 $COMMAND_Number,于是输出就是命令它本身:history 1 | { read x y; echo $y; }?

于是msg=$(history 1 | { read x y; echo $y; });,$msg 变量总是表示当前执行的命令?

上面是我的理解,结果是明显的,就是 $msg 变量保存的是 bash 最后执行的命令。 但还是觉得讲不明白,history 1 和管道结合还是感觉没太理解。

如果那个高手看到了,麻烦指点下到底怎么理解它。

Linux关机运行的脚本,Linux 关机 脚本相关推荐

  1. 嵌入式linux的运行过程,嵌入式linux的启动流程--详解

    开门见山: 1.嵌入式linux启动第一步----Boot Loader Boot Loader在这里我就不细说了,详细分析起来的话有很多内容,网上也有很多讲解很详细的文章.这段小程序中我们可以初始化 ...

  2. linux双击运行jar包,linux下发布JAR包 并运行

    虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...

  3. linux里运行windows,在Linux上运行Windows应用程序

    当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net  网友分享于:2015- ...

  4. linux后台运行cat命令,Linux程序前台后台切换

    Linux程序前台后台切换1.在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行Ubuntu$">root@Ubuntu$ ./tcpserv01 ...

  5. linux中运行.pro文件,Linux下pro*c运行配置

    在Linux下运行.pc程序时,需要用到proc命令. -配置Pro*C/C++,以及链接到Oracle. 一般安装oracle时候都已经安装了pro*c,所以一般不需要再配置/etc/profile ...

  6. linux如何运行java程序,Linux环境下运行简单java程序

    一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...

  7. linux系统运行flash3d,在Linux上运行STM32,快来试试!

    原标题:在Linux上运行STM32,快来试试! STM32MP1多核微处理器,带有650Mhz主频的cortex-A7双核以及一个主频为209Mhz的cortex-M4核,即片内拥有三核.很多STM ...

  8. c#如何在linux上运行程序,在Linux上运行C#

    众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x.ME.NT.2000.XP和Win CE之类的操作系统.但是,现在却有了一个叫做Mono的项目,它的目 ...

  9. Linux无法运行cal指令,Linux cal 命令 command not found cal 命令详解 cal 命令未找到 cal 命令安装 - CommandNotFound ⚡️ 坑否...

    显示行号 | 选择喜欢的代码风格 默认 GitHub Dune LakeSide Plateau Vibrant Blue Eighties Tranquil cal 命令显示当前日历或指定日期的日历 ...

  10. linux定时器跑命令,linux下运行定时器(cron/centos/js脚本)

    目的:在centos 6.5系统上定时运行casperjs脚本. 1.启动定时器 要实现目的,首先要可以在centos上运行定时任务,百度后知道有个cron的东西存在,所以第一步就是启动定时器服务(以 ...

最新文章

  1. scala学习笔记(一)入门初探
  2. 雷林鹏分享:PHP 数组
  3. WSL 1 运行 Ubuntu 20.04 将会出现问题
  4. 爬虫爬评书吧_200行代码实现一个有声听书网爬虫下载器
  5. Win7如何快速打开本地连接
  6. 自学python能学成吗-Python能自学成功吗?
  7. 剑指offer---二叉树的镜像
  8. 计算机硬件课题,计算机硬件技术基础免试课题.pptx
  9. 人脸对齐(十一)--PIFA2015
  10. 2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
  11. css3探测光圈_一款带光圈阴影的纯CSS3 Instagram图标
  12. 简述TCP/IP参考模型
  13. html ui在线生成器,漂亮的CSS按钮样式集以及在线生成工具
  14. 隐藏input的三种方法和区别
  15. matlab制作水印,怎么在含有水印的图像中提取出水印
  16. 让Fireball CodeEditor控件支持中文
  17. matlab中正弦信号的功率计算,范数norm
  18. jQuery 效果 - 淡入淡出,fadeIn,fadeOut,fadeToggle的使用
  19. 针对唯一化实例对话框程序,及其命令行操作方法
  20. Android之Wifi使用

热门文章

  1. jQuery环境搭建
  2. Android之播放一首简单的音乐
  3. 安卓开发之Toast(吐司)应用
  4. Ajax(二)-XMLHttpRequest(核心)对象的属性和方法
  5. 神经科学与“记忆印记”
  6. DHCP 不同情况的操作
  7. Spring分页实现PageImplT类
  8. PHP生成缩略图(2)--等比缩略图
  9. python 判断当前系统的Python编译器类型
  10. OSChina 周三乱弹——真相往往令人内牛满面