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,它将添加的steam id附加到集合中,并将“a”附加到admins_simple.ini。我写了一个单独的shell脚本来进行附加操作,因为当我试图在index.js本身使用fs.appendFile执行此操作时,我得到了相同的错误:
/home/ubuntu/serverfiles/csgo/addons/sourcemod/configs/admins_simple.ini: No such file or directory
而且所有这些都发生在运行Ubuntu的EC2示例的根卷上。
directory containing index.js and addvips.sh
directory containing admins_simple.ini
1条答案
按热度按时间t9aqgxwy1#
index.js无法成功运行脚本的原因是它运行在google服务器上,而不是我的ec2示例上。