检查文件是否存在在启动守护进程中不起作用
Checking if a file exists isn't working in a startup daemon
好的,所以我有一个无头的 Raspberry Pi,很久以前我创建了一个守护进程,让它在启动时播放声音效果,所以我知道它(希望)已准备好进行 SSH 连接。
#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start: $local_fs $remote_fs $syslog
# Required-Stop: $local_fs $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
case "" in
start)
omxplayer /home/pi/Music/boku\ satchii.mp3
;;
stop)
;;
restart)
[=10=] start
;;
status)
echo "Running"
;;
*)
echo "Usage: [=10=] {start|stop|restart|status}"
exit 1
;;
esac
exit 0
工作正常。
现在我 运行 遇到的问题是 Pi 大约每月一次失去联网能力(我放弃了尝试找出原因)并且必须手动重新启动。为了解决这个问题,我在 crontab 中添加了每周一次的重启,但它总是在每个星期六的午夜用 "BOKU SATCHII!" 唤醒我,这在第一次出现的一半时就不再有趣了。
我扔下了一个快速 shell 脚本,该脚本使用 "touch" 创建文件“/etc/quietboot”,然后重新启动。那很好用。我将它替换为 crontab 中的重启,然后我修改了守护进程如下:
start)
if [-e /etc/quietboot]; then
sudo rm /etc/quietboot
else
omxplayer /home/pi/Music/boku\ satchii.mp3
fi
;;
所以思路是如果文件存在就删除,如果不存在就播放音效。我一直在测试它,它每次都只是播放声音效果,并且从不删除 quietboot 文件。我尝试将文件放在 home/pi/ 中,但得到了相同的结果。
我确定我在这里犯了一些基本错误,但我不确定是什么。谁能帮帮我?
关于您的陈述:
if [-e /etc/quietboot]; then
你需要额外的空格:
if [ -e /etc/quietboot ]; then
# ^ ^
# here! and here!
您当前的声明正在尝试 运行 [-e
可执行文件但失败了。此失败意味着 else
块始终为 运行.
如果你尝试(从命令行),你实际上可以看到这个:
pax> if [false] ; then echo it was false ; else echo it was true ; fi
[false]: command not found
it was true
pax> if [ false ] ; then echo it was false ; else echo it was true ; fi
it was false
好的,所以我有一个无头的 Raspberry Pi,很久以前我创建了一个守护进程,让它在启动时播放声音效果,所以我知道它(希望)已准备好进行 SSH 连接。
#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start: $local_fs $remote_fs $syslog
# Required-Stop: $local_fs $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
case "" in
start)
omxplayer /home/pi/Music/boku\ satchii.mp3
;;
stop)
;;
restart)
[=10=] start
;;
status)
echo "Running"
;;
*)
echo "Usage: [=10=] {start|stop|restart|status}"
exit 1
;;
esac
exit 0
工作正常。
现在我 运行 遇到的问题是 Pi 大约每月一次失去联网能力(我放弃了尝试找出原因)并且必须手动重新启动。为了解决这个问题,我在 crontab 中添加了每周一次的重启,但它总是在每个星期六的午夜用 "BOKU SATCHII!" 唤醒我,这在第一次出现的一半时就不再有趣了。
我扔下了一个快速 shell 脚本,该脚本使用 "touch" 创建文件“/etc/quietboot”,然后重新启动。那很好用。我将它替换为 crontab 中的重启,然后我修改了守护进程如下:
start)
if [-e /etc/quietboot]; then
sudo rm /etc/quietboot
else
omxplayer /home/pi/Music/boku\ satchii.mp3
fi
;;
所以思路是如果文件存在就删除,如果不存在就播放音效。我一直在测试它,它每次都只是播放声音效果,并且从不删除 quietboot 文件。我尝试将文件放在 home/pi/ 中,但得到了相同的结果。
我确定我在这里犯了一些基本错误,但我不确定是什么。谁能帮帮我?
关于您的陈述:
if [-e /etc/quietboot]; then
你需要额外的空格:
if [ -e /etc/quietboot ]; then
# ^ ^
# here! and here!
您当前的声明正在尝试 运行 [-e
可执行文件但失败了。此失败意味着 else
块始终为 运行.
如果你尝试(从命令行),你实际上可以看到这个:
pax> if [false] ; then echo it was false ; else echo it was true ; fi
[false]: command not found
it was true
pax> if [ false ] ; then echo it was false ; else echo it was true ; fi
it was false