【问题标题】:Ubuntu: Starting a shell script with args at bootUbuntu:在启动时使用 args 启动 shell 脚本
【发布时间】: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。经过测试,它可以工作。

标签: linux bash shell ubuntu


【解决方案1】:

您需要查看程序的输出。 cron 将输出邮寄给 crontab 的所有者或在 crontab 顶部的 MAILTO 环境变量中指定的地址。

注意执行环境。通常情况下,大部分基本环境变量(PATHHOME 等)都不会设置,可能会导致执行错误。

有关详细信息,请参阅 cron 手册页:

man 5 crontab

这些帖子也可能对您有所帮助:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-11
    • 2013-03-31
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多