热门标签 | 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


推荐阅读
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • 在Laravel中实现PHP对JSON数据的发布与处理 ... [详细]
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • 程序连接MySQL数据库的多种方法详解 ... [详细]
  • 本文将详细介绍如何利用JMeter高效执行API接口测试,涵盖JMeter的基础介绍、安装方法、中文环境配置、主要元件及其作用域和执行顺序等内容,并分享一系列实用的测试技巧,帮助读者全面掌握JMeter接口测试的全过程。 ... [详细]
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • 本文探讨了通过JavaScript实现密码强度检测功能的优化方法。密码强度分为三个等级:使用单一类型字符(如纯数字或纯字母)且长度在1-6位的密码为“弱”;包含两种类型字符(例如字母与数字组合)的密码为“中等”;而长度超过12位并结合三种或四种类型字符(如大小写字母、数字及特殊符号)的密码则被认定为“强”。此外,文章还介绍了如何利用正则表达式和条件判断语句来高效地评估密码强度,确保用户账户的安全性。 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • JavaScript 流程控制:分支与循环结构实例解析
    JavaScript 流程控制:分支与循环结构实例解析 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • 本文深入探讨了Java枚举类型的使用与实践,详细解析了枚举的基本用法及其在实际开发中的应用。首先介绍了枚举作为常量的替代方案,自JDK 1.5起,通过枚举可以更加简洁、安全地定义常量,避免了传统方式中可能出现的错误。此外,文章还探讨了枚举在实现单例模式、状态机等场景中的优势,并提供了多个实际案例,帮助开发者更好地理解和运用这一强大的语言特性。 ... [详细]
  • Docker网络基础探讨了如何通过高效的技术手段实现跨主机容器间的顺畅通信与访问。本文深入分析了Docker网络架构,特别是其在多主机环境下的应用,为Go语言开发者提供了宝贵的实践指导和理论支持。 ... [详细]
  • 在Maven项目中高效集成JaCoCo代码覆盖率插件,以显著提高测试质量。首先,需在项目的`pom.xml`文件中添加JaCoCo和JUnit的依赖配置,确保测试框架和覆盖率工具的无缝结合。通过这种方式,开发者不仅能够执行单元测试,还能获取详细的代码覆盖率报告,从而优化测试策略和代码质量。 ... [详细]
  • MySQL日志分析在应急响应中的应用与优化策略
    在应急响应中,MySQL日志分析对于检测和应对数据库攻击具有重要意义。常见的攻击手段包括弱口令、SQL注入、权限提升和备份数据窃取。通过对MySQL日志的深入分析,不仅可以及时发现潜在的攻击行为,还能详细还原攻击过程并追踪攻击源头。此外,优化日志记录和分析策略,能够提高安全响应效率,增强系统的整体安全性。 ... [详细]
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社区 版权所有