热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Linux系统中通过Shell脚本创建并激活自定义命令

在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。

前言

之前做过一个Java Web系统,由很多的子系统组成,由尽管其子系统颇多,但是要在服务器上管理这些子系统(启动、停止、重启等)却很方便,只需要输入tt 便能看见每个应用的名称、状态等,然后输入对应的应用名+操作代码,便能进行对应的操作,这一切都源于它使用了自定义的命令,来调用对应的shell脚本或命令。正好目前我做的一个系统,还处于起步阶段,每次部署都太麻烦,所以就做了一个类似的功能。

实现这个功能主要有两步:

  1. 创建相关操作的shell脚本;
  2. 自定义命令

1. 创建Shell脚本

#!/bin/bash
export APP_PATH=/usr/local/SmartDataStack
operate=${1}
#echo "${0}"
APP_NAME="sds"

pid=$(ps -aef | grep sds- | grep -v grep | awk '{print $2}')

startSDS(){

if [ "$pid" == "" ]; then
echo -n "$APP_NAME starting: "

for f in $APP_PATH/sds*.jar; do
sudo chown root:root $f && sudo chmod 775 $f
done

if [ "$?" == 0 ]; then
sudo sh $APP_PATH/start.prod.sh

if [ "$?" -eq 0 ]; then

echo "launch done, next will copy upload directory to $APP_PATH/tmp/webapp"
sleep 10
sudo cp -R $APP_PATH/upload $APP_PATH/tmp/webapp
echo -e ""
echo "Success"
else
echo "failure"
fi

else
echo "failure, 'chown' && 'chmod failure'"
echo -e ""
exit 1
fi

else
echo "can't start SDS: SDS is running."
echo -e ""
exit 1
fi
}

stopSDS() {

if [ "$pid" == "" ]; then
echo "can't stop SDS: SDS is not running."
echo -e ""
exit 1
fi

echo -n "$APP_NAME stoping[pid: $pid]: "

# first copy upload dir
sudo cp -R $APP_PATH/tmp/webapp $APP_PATH/upload && sudo kill $pid

# sudo kill `ps -aef | grep sds- | grep -v grep | awk '{print $2}'`

if [ "$?" == 0 ]; then
sleep 5
echo "success"
else
echo "failure"
echo -e ""
exit 1
fi
}

restartSDS() {

echo "$APP_NAME restart..."
# stopSDS
# startSDS
$0 stop
$0 start
}

statusSDS() {

#echo "------------------------------------------"
echo " pid status "
echo "------------------------------"

if [ "$pid" == "" ]; then
echo "$APP_NAME$pid stoped"
else
echo "$APP_NAME$pid started"
fi


}

echo -e ""

case "$operate" in
start)
startSDS
;;
stop)
stopSDS
;;
reload|restart)
restartSDS
;;
status)
statusSDS
;;
*)
echo -e "Usage params: start|stop|status|restart|reload"
;;
esac

echo -e ""

exit 0

2. 配置别名(alias)

别名的配置可以分为两种,一种是只对自己生效,一种是对所有用户生效。

1.) 配置只对自己生效的别名

(1) 编辑~/.bashrc文件

sudo vim ~/.bashrc 

(2) 加入内容

alias sds="/usr/local/sh/sds.sh"

(3) 使配置生效

source ~/.bashrc

这时候使用sds即可查看效果,如下:

$ sds

Usage params: start|stop|status|restart|reload

$ sds status

pid status
------------------------------

sds 24019 started

如果显示没有此命令的话,查看是否有~/.bash_profile 文件,这个文件会加载~/.bashrc 文件,源码如下:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:/root/bin:/sbin:/usr/sbin:/usr/script

export PATH

2.) 设置全局别名,对所有用户生效

上面的配置只能对当前用户有效,如果需要让所有的用户都能使用此别名,则需要使用下面的方法。

(1) 在/etc/profile.d 目录下新建文件(文件名自定义),例:

sudo vim /etc/profile.d/custom-aliases.sh

(2) 输入别名配置,例:

alias sds="/usr/local/sh/sds.sh"

(3) 保存文件

(4) 重新打开任何的terminals都可以使用这个别名了

$ sds

Usage params: start|stop|status|restart|reload

$ sds status

pid status
------------------------------

sds 24019 started

Enjoy!

参考资料

http://askubuntu.com/questions/610052/how-can-i-preset-aliases-for-all-users


推荐阅读
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍了如何解决 ChinaASP.Upload 错误 '80040002',即必须添加版权信息的问题,并提供了详细的步骤和注意事项。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • Java中字符串截取方法详解
    本文详细介绍了Java中常用的字符串截取方法及其应用场景,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • Go从入门到精通系列视频之go编程语言密码学哈希算法(二) ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文详细介绍了如何在 Node.js 环境中利用 Nodemailer 库实现邮件发送功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • 解析链接脚本与可执行文件的关系
    本文详细探讨了链接脚本和可执行文件的基本概念及其在嵌入式系统中的应用,特别是S32K144芯片的具体实现。 ... [详细]
author-avatar
手机用户2502922161
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有