我正在编写一个执行一系列 javascript 文件的 bash 脚本,所有这些文件都是某种 MySQL 查询。问题是,当脚本的第一行执行时,它会停止进程并且不会让其他 javascript 文件运行。
我已经尝试在每一行之后使用 &
希望它能在后台运行而不停止执行流程。
#!/bin/bash
# a script to delete the database and create the tables
node createDatabase &
node createTables &
当 createDatabase.js 文件正常执行时,有一个回调函数输出“数据库创建成功”,然后执行就停止了。
最佳答案
问题一定出在 nodejs,Nodejs 不会在创建数据库时终止进程,你必须在成功时调用 process.exit(0)
或 process.exit(1)
错误否则它将等待信号终止或停止。
这是一个简单的 Nodejs 脚本,它根据数据库的响应创建数据库并退出。
var mysql = require('mysql');
var con = mysql.createConnection({
host: "my.test.com",
user: "root",
password: "password"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
con.query("CREATE DATABASE mydbtest", function (err, result) {
if (err){
throw err;
process.exit(1);
}
else{
console.log("Database created");
process.exit(0);
}
});
});
现在另一个脚本将在上述数据库上创建表。
var mysql = require('mysql');
var con = mysql.createConnection({
host: "mydb.test.com",
user: "root",
password: "password",
database: "mydbtest"
});
con.connect(function(err) {
if (err){
throw err;
process.exit(1);
}
else{
console.log("Connected!");
var sql = "CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))";
con.query(sql, function (err, result) {
if (err){
throw err;
process.exit(1)
}
else{
console.log("Table created");
process.exit(0)
}
});
}
});
此代码中的重要部分是 process.exit(0)
或 process.exit(1)
。
现在 Bash 脚本将是
#!/bin/bash
echo "creating db"
nodejs creatdb.js
echo "creating talbe"
nodejs createtable.js
您不需要在后台发送它们,现在您可以根据一个退出代码退出脚本或做出任何决定。
关于mysql - 如何在 bash 脚本中运行所有命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56988364/