pi上仅一次启动脚本

时间:2016-05-25 14:52:28

标签: mysql shell unix

我在Git中有一些软件(主要是python,.sh和cron等),我在启动我的Pi时拉下来确保我总是运行最新的代码。我是Unix和Git的新手。我有很多Pis,所以我有效地尝试自动化分发,并在每次启动时保持最新状态。

我有一个MySQL数据库,我刚刚添加了一些新表。

我现在要做的是下拉一个脚本文件来创建一个表并设置一些默认值,但我不希望每次启动时都这样做,或者它可能会设置数据值每次开机都回到默认状态......没问题。

到目前为止我所获得的是一个在重启时通过crontab运行的.sh文件。这个文件执行Git pull,然后移动文件并对其进行排序。

我计划做的是在我的boot .sh文件中添加以下命令:

sudo MySQL --batch -h localhost -u root --password=PASSWORD -D databasename < sqlscript > outfile.log

sqlscript文件将包含CREATE TABLE命令,UPDATE等。

但我能解决的问题是如何只做一次?

考虑的选项:

  • 我可以在运行之后删除sqlscript,但每次启动时我都会从.sh文件中收到错误。

  • 我可以在没有MYSQL命令的情况下运行一次后替换.sh文件...但是如果一个Pi落后于版本并且在升级中跳过几个版本我就会错过在中间.sh文件上,SQL表是

  • 我可以通过在整个地方添加版本号来做一些非常复杂的事情,但现在这工作太多了。

  • 我或许可以通过从TABLES表中选择来检查表格是否已经存在,如果它确实跳过了脚本,如果没有执行则可以?这可能是前进的方向,任何人都有一个示例脚本来检查这个...我之前没有做过shell脚本中的语句。

我怀疑这已经做了很多次,所以欢迎任何建议。

2 个答案:

答案 0 :(得分:0)

你可以创建一个标志文件,比如说

/root/run-database-init

它不必包含任何内容,只是存在,因为您将在init脚本中测试它的存在并在之后删除它:

if [ -f /root/run-database-init ]; then
     # do stuff with mysql...
     rm /root/run-database-init
fi

答案 1 :(得分:0)

我这样做了:

如果! [-f chkfile];然后

触摸chkfile

MySQL blah blah

否则

echo found chkfile,因此跳过表创建

网络连接

(不确定为什么它没有缩进,但它的2个字符缩进)