touch、echo指令在开始自启动的shell脚本中失效问题

荆楚闲人 2014-06-30 06:30:10
各位大侠:最近写了一个shell脚本,并赋予可执行权限,shell脚本配置为开机自动运行,shell里用touch创建一个文件,且用echo向这个文件写入一句话,结果发现touch、echo失效,没有实现预想的功能。但开启一个shell界面,在shell里用sh test.sh是可以的(其中test.sh是我shell脚本文件名)。test.sh脚本如下:

# !/bin/sh

currDateTime=`date +%Y%m%d%H%M%S`
prefilename="restartacqdatasys"
extendname=".log"
logfilename=${prefilename}$currDateTime$extendname
touch $logfilename
echo "AcqDataSys exit, restart the program!" > $logfilename

其中
touch $logfilename、
echo "AcqDataSys exit, restart the program!" > $logfilename
在开机自动运行时失效,但开启一个shell界面,在shell里用sh test.sh没问题可以实现预想功能。用vi编辑/etc/init.d/rcS加入我的shell脚本的绝对路径如下,以实现开机自动运行:

其中倒数第二行就是我的脚本,脚本绝对路径绝对没错的,开机时程序也启动起来了,但未见touch和echo功能实现。恳求大侠们支招


...全文
1218 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljc007 2014-07-08
  • 打赏
  • 举报
回复
引用 5 楼 danshiming 的回复:
谢谢你的解答!你那样确实可以,但不符合我的需求啊
我的意思是让你用4楼的方法看看 /tmp/test.log 里面是否有什么报错信息
buyong 2014-07-07
  • 打赏
  • 举报
回复
/test.sh 应该在/bin/sh之后吧?
荆楚闲人 2014-07-07
  • 打赏
  • 举报
回复
引用 4 楼 ljc007 的回复:
/test.sh & 改成: /test.sh > /tmp/test.log 2>&1 重启之后看看 /tmp/test.log 的内容
谢谢你的解答!你那样确实可以,但不符合我的需求啊,我的需求是shell脚本开机自动运行,每10秒钟检测一下我的程序(程序名为AcqDataSys)是否僵尸或退出 。如果僵尸或退出,就以当期日期和时间为文件名建立一个日志文件,且写入一条日志到这个日志文件中去,之后如果是僵尸就重启系统,如果是退出了,就重启该程序。但在开机自动运行时,touch、echo都失效,在shell界面单独运行这个脚本,则没问题。 shell脚本如下: # !/bin/sh while true do # echo "Hello ,dansir!" currDateTime=`date +%Y%m%d%H%M%S` prefilename="restartacqdatasys" extendname=".log" #logfilename=$prefilename""$currDateTime logfilename=${prefilename}$currDateTime$extendname status=`ps | grep 'AcqDataSys' | sed 's/^.*grep.*$//g'| sed 's/^.*[0-9] *//g' | sed 's/ *[/].*$//g'` zombiestatus1=`ps | grep 'AcqDataSys' | sed 's/^.*grep.*$//g'| sed 's/^.*root//g' | sed 's/ *[[].*$//g' | sed 's/^. *//g'` zombiestatus2=`ps | grep 'AcqDataSys' | sed 's/^.*grep.*$//g'| sed 's/^.*Z *//g'` echo $status echo $zombiestatus1 echo $zombiestatus2 if busybox test $zombiestatus1 = "Z" || busybox test $zombiestatus2 = "[AcqDataSys]"; then echo "AcqDataSys Zombied,now reboot system!" touch $logfilename echo "AcqDataSys Zombied, now reboot system!" > $logfilename reboot -f fi if busybox test -z $status; then echo "AcqDataSys exit, restart the program!" touch $logfilename echo "AcqDataSys exit, restart the program!" > $logfilename . /etc/profile /upepri/mptmsu/bin/AcqDataSys -qws & fi sleep 10s done
ljc007 2014-07-01
  • 打赏
  • 举报
回复
/test.sh & 改成: /test.sh > /tmp/test.log 2>&1 重启之后看看 /tmp/test.log 的内容
荆楚闲人 2014-07-01
  • 打赏
  • 举报
回复
引用 1 楼 awsqsh 的回复:
先 echo 下 $logfilename 看路径是否正确。是否有写权限。
谢谢你的回复,单独开启shell,是可以的啊,但是开机自启动时就不行,估计是开机自启动时,没有shell界面呢。touch、echo都是shell的命令吧,貌似只能在shell里才能执行呢,那我要脱离shell,开机自动建一个文件咋办呢?
awsqsh 2014-06-30
  • 打赏
  • 举报
回复
或者先去掉echo看touch是否成功; 直接添加一句touch /tmp/XXXX看是否成功。 挨个排的try
awsqsh 2014-06-30
  • 打赏
  • 举报
回复
先 echo 下 $logfilename 看路径是否正确。是否有写权限。

18,831

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧