linux脚本.sh,使用全路径无法正常运行的原因

linux脚本.sh,使用全路径无法正常运行的原因,第1张

.sh">#!/bin/bash

#***** 你的错误再这里,取出的进程号都有两个 **** 运行脚本已经给出提示

#pid,进程id,process identity

pid=`pidof -s <tomcat进程完整进程显示的名称,如果有路径带着路径>`

kill -9 $pid

#原文写的1秒,你觉得合理吗?真能完成?

sleep 30

/usr/local/apache-tomvat-7.0.55/bin/startup.sh

#原文写的1秒钟你觉得tomcat能启动起来吗?

sleep 15

ps -ef | grep tomcat

sleep 5

exit 0

第一种情况:当centOS 随机启动文件 /etc/rc.local 失效时请按如下修改:

1、echo /etc/rc.local >>/etc/profile &&  source /etc/profile 注:当执行生效会看到效果(/etc/profile 文件在每个用户登录时会首先检查并执行)

2、reboot注:重新启动检测是否生效

第二种情况:echo /etc/rc.local >>~/.bash_profile &&  source /etc/profile。

第三种情况:在 /etc/init.d 目录下增加对应程序启动脚本,然后重启测试,内容如下:chkconfig --add 脚本名(将该脚本注册到系统服务,此时直接输入脚本可以直接运行)。

chkconfig 脚本名 on(将该服务加入随系统开机启动),添加自启动,必须在脚本里面加入chkconfig 启动顺序,才能加入进去。

/etc/rc.local 中部分命令无法执行。

在linux系统中添加随系统启动而自动运行的服务,只需在/etc/rc.local 脚本文件中添加即可,当运行的命令或程序不带路径时,例如:

#!/bin/bash

distccd --user nobody --allow 10.10.98.0/24 --log-file=/var/log/distcc.log --verbose --daemonloadavg  -s 10.10.98.20 >/dev/null 2>&1

注意,distccd、loadavg命令存放在/usr/local/bin/目录下

在系统执行这些命令时将报错,无法正常执行!

由于在执行rc.local脚本时,PATH环境变量未全部初始化,目录/usr/local/bin/ 需在执行/etc/profile 后才被添加到环境变量PATH中。

解决方法:在 /etc/rc.local 执行 /usr/local/bin/ 目录中的命令需要使用绝对路径。

1、使用runlevel或者who -r查看服务器的运行级别,根据运行级别查看/etc/rc.d/rcX.d/S99local ->../rc.local,所指向的rc.local文件位置是否正确。一般是正确的

默认在/etc/rc.d/rc.local下面,/etc/rc.local只是它的一个symlink。

2、注意在rc.local中的脚本尽量使用绝对路径,脚本要加执行权值,脚本使用的服务和环境变量必须先加载,否则脚本会执行错误而退出。

3、理解linux启动的流程,即init脚本先执行,最后再执行rc.local中的命令。

4、要使用普通用户的环境变量需要在rc.local中使用export var=xxx先导出或者使用source /etc/profile,使环境变量生效才能使用,或者是sleep 10 (以s为单位),等其他的必须服务启动后。

5、在rc.local中的脚本不能执行时,我们可以在脚本中使用set -x打开脚本的调试功能,并且将输出重定向到一个文件中,便于查看出错原因。如/root/echo.sh >>/root/debug.txt

再执行相关的脚本命令部分。

找不到该目录?仔细看看你的路径对吗?要运行脚本需要指定该脚本的具体的路径,或者是进入到该脚本的目录中,再执行。这很容易理解。打个比方,要做饭了,你不是要先回家,进厨房,才能开火做饭?你的家,你的厨房就是目录。总不能说还在公交车上呢,就开始煎炒烹炸的烧菜煮饭吧?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9017968.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存