【发布时间】:2017-01-30 22:30:58
【问题描述】:
我正在运行 Ubuntu Server 14.04,我正在尝试让一个 shell 脚本在启动时运行。问题是脚本需要 args,其中一个是文件(数据库),另一个是与脚本位于同一文件夹中的端口号。我对此很陌生。
例如,当我进入终端中的文件夹时,我可以输入:
sh script.sh potato 1234
script.sh 是脚本,potato 是文件名,1234 是端口号。手动操作时效果很好。
我尝试添加一个crontab,@reboot script.sh potato 1234,当然不行,找不到脚本。
所以我尝试了:
@reboot */path/to/my/script.sh* potato 1234
再次,没有工作。以为找不到数据库。
所以我尝试了:
@reboot path/to/my/script.sh /path/to/my/potato 1234
还是没有骰子。
我也尝试使用路径来运行它
sh path/to/my/script.sh potato 1234
当然失败了 - 脚本启动并告诉我它找不到数据库,因为它应该。
sh /path/to/my/script.sh /path/to/my/potato 1234 没有返回任何错误,但它也没有启动。
这就是我尝试启动的脚本的样子:
if [ $# -lt 1 -o $# -gt 2 ]; then
echo 'Usage: restart dbase-prefix [port]'
exit 1
fi
if [ ! -r $1.db ]; then
echo "Unknown database: $1.db"
exit 1
fi
if [ -r $1.db.new ]; then
mv $1.db $1.db.old
mv $1.db.new $1.db
rm -f $1.db.old.Z
compress $1.db.old &
fi
if [ -f $1.log ]; then
cat $1.log >> $1.log.old
rm $1.log
fi
echo `date`: RESTARTED >> $1.log
nohup ./moo $1.db $1.db.new $2 >> $1.log 2>&1 &``
有什么线索吗?
【问题讨论】:
-
运行
sh -x /path/to/my/script.sh /path/to/my/potato 1234,看看你得到了什么作为正在运行的命令?它在哪里停止/失败? -
感谢收看!它是:
+ [ 2 -lt 1 -o 2 -gt 2 ] + [ ! -r /path/to/my/potato.db ] + [ -r /path/to/my/potato.db.new ] + mv /path/to/my/potato.db /path/to/my/potato.db.old + mv /path/to/my/potato.db.new /path/to/my/potato.db.db + rm -f /path/to/my/potato.db.old.Z + [ -f /path/to/my/potato.log ] + cat /path/to/my/potato.log + rm /path/to/my/potato.log + compress /path/to/my/potato.db.old /path/to/my/script.sh: 32: /path/to/my/script.sh: compress: not found + date + echo Sun Nov 22 23:08:07 GMT 2015: RESTARTED root@moodev:/# + nohup ./moo /path/to/my/potato.db /path/to/my/potato.db.new 7777 -
我不能进入换行符。在这里提问也是新手。它似乎在压缩时崩溃了。如果我在其文件夹中运行脚本,让我看看它是否会出现问题。
-
这是我直接在其文件夹中使用 -x 得到的。
+ [ 2 -lt 1 -o 2 -gt 2 ] + [ ! -r potato.db ] + [ -r potato.db.new ] + [ -f potato.log ] + cat potato.log + rm potato.log + date + echo Sun Nov 22 23:18:40 GMT 2015: RESTARTED -
好的,所以我通过实现 cron 无论如何都按术语运行所有内容来解决此问题。所以,@reboot cd /path/to/my/; ./restart.sh 土豆 7777。经过测试,它可以工作。