一、前言
国庆期间,服务器断电了,导致服务器上面数据库等应用全部关闭了,但是启动应用时候需要切换到对应的用户,让同事启动,又存在各种应用比较麻烦,个人应用也没有提前编写维护手册,导致服务关闭了好几天。为了省事我就想了一个偷懒的办法,就是用shell脚本切换到那个用户, 然后执行对应的应用脚本。这篇文章我只演示怎么用shell脚本切换到其他用户执行命令,同时在编写过程中用到了其他命令,也总结了使用方法。
二、脚本编写
2.1 执行命令代码段
1 | #!/bin/sh |
输出结果为:
mysql-----------------
/home/mysql
mysql-----------------
wno704-----------------
/home/wno704
wno704-----------------
2.2 执行单个命令
语法:su - 用户 -c "命令"
示例:
1 | su - mysql -c "service mysql start" |
2.3 执行批量命令
语法:su - 用户 -s /bin/sh shell脚本
示例:
1 | su - wno704 -s /bin/sh /opt/soft/wno704/start.sh |
三、nohup命令使用
3.1 介绍
nohup 是 no hang up 的缩写,就是不挂断的意思。nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。
3.2 使用场景
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
3.3 使用
在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。如果在我们上面shell脚本中切换用户,那么这个命令,则会在命名的统计目录中生成nohup.out文件。为了解决这种问题,我们需要对文件输出进行重定向。
案例一
1 | nohup command > myout.file 2>&1 & |
在上面的例子中,
1 | 0 – stdin (standard input) |
2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到myout.file文件中。
案例二
1 | su - test -c "nohup /opt/test/run.sh > /opt/test/nohup.out &" |
这个例子是在脚本执行中将test用户的run.sh执行结果输出到脚本执行的平级目录中。