JavaScript代码为
const admin = require('firebase-admin');
const serviceAccount = require('./raniserverFBkey.json');
const functions = require('firebase-functions');
const { exec } = require('child_process');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
exports.addSteamID1 = functions.firestore.document('steamIDs/{docID}')
.onCreate(async (snap, context) => {
const steamID = snap.data().steamID;
exec(`./addvips.sh ${steamID} a`, (err, stdout, stderr) => {
if (err) {
console.error(`exec error: ${err}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
});
shell脚本代码是
#!/bin/bash
if [ -z "$1" ] || [ -z "$2" ]
then
echo "Error: Not enough arguments provided."
exit 1
fi
data=""$1" "$2""
echo "$data" >> /home/ubuntu/serverfiles/csgo/addons/sourcemod/configs/admins_simple.ini
echo "Successfully appended '$data' to the file."
当我使用
运行脚本时./addvips.sh steamid a
脚本运行正常,并成功向admins_simple.ini文件添加数据。
但是当我运行JavaScript代码时,脚本给出错误
stderr: ./addvips.sh: line 10: /home/ubuntu/serverfiles/csgo/addons/sourcemod/configs/admins_simple.ini: No such file or directory
JavaScript代码由Firebase云函数执行。JavaScript文件名为index.js,脚本名为addvips.sh
为什么脚本在终端手动执行时运行良好,但在JavaScript执行时给出错误?
我有一个Firebase云函数,每当一个新文档被添加到集合时就调用它。该函数应该调用脚本addvips.sh,该脚本将添加的蒸汽id附加到集合和"a"admins_simple.ini。我为附加操作编写了一个单独的shell脚本,因为当我试图在index.js中使用fs。我得到相同的错误:
/home/ubuntu/serverfiles/csgo/addons/sourcemod/configs/admins_simple.ini: No such file or directory
所有这些都发生在运行Ubuntu的EC2实例的根卷上。
目录包含index.js和addvips.sh
包含admins_simple.ini的目录
index.js无法成功运行脚本的原因是它运行在谷歌服务器上,而不是我的ec2实例上。