우분투 서버에서 Node.JS로 실행되는 두 개의 불일치 봇 (app.js 및 activity.js)이 있습니다. 내가 직면하고있는 문제는 두 파일이 모두 실행 중일 때 activity.js 만 파일을 수정할 수 있다는 것입니다. 파일은 users.JSON입니다. app.js의 코드 :두 개의 Node.JS 스크립트가 하나의 .JSON 파일에서 읽고 쓰지만 첫 번째 스크립트는 파일을 수정할 수 없습니다.
const Discord = require("discord.js")
var moment = require("moment")
var data_users = fs.readFileSync('/home/discord/activity_bot/users.json', 'utf-8')
var arxeio = JSON.parse(data_users)
...
for (var i in duos) {
if (arxeio[duos[i].username]) {
console.log(`before: ` + arxeio[duos[i].username])
arxeio[duos[i].username]+=15
console.log(`after: ` + arxeio[duos[i].username])
} else {
arxeio[duos[i].username]=15
}
}
fs.writeFile('/home/discord/activity_bot/users.json', JSON.stringify(arxeio, null, 2), 'utf-8', function(err) {
if (err) throw err
console.log('entered')
})
그리고 Activity.js에 대한 코드는 다음과 같습니다
const Discord = require("discord.js");
var fs = require('fs');
var data = fs.readFileSync('/home/discord/activity_bot/users.json', 'utf-8')
var arxeio = JSON.parse(data)
...
var kuklos = setInterval(function(done) {
client.guilds.get('323921290543235073').channels.forEach(function(kanali, kanaliID) {
if (kanali.type === 'voice' && !kanali.name.includes("AFK")) {
kanali.members.forEach(function(melos, melosID) {
let xristis = melos.user.username;
if (arxeio[xristis]) {
arxeio[xristis]++;
} else {
arxeio[xristis] = 1
}
fs.writeFile('/home/discord/activity_bot/users.json', JSON.stringify(arxeio, null, 2), 'utf-8', function(err) {
if (err) throw err
})
})
}
})
}, 60*1000);
, 듀오는 회원의 테이블입니다. Activity.js가 실행되고 있지 않을 때 문제가 App.js의 fs.writeFile이라는 결론을 내 렸습니다. activity.js가 실행 중일 때 "입력 됨"이 실제로 app.js에 기록되지만 파일은 수정되지 않습니다. 또한 + = 명령 위와 아래의 두 명령은 수정되었지만 users.Json 파일에 저장되지 않았 음을 보여줍니다. 어떤 생각이 탓일 것인가? (내 skillz을 제외하고 : P)
fs.close() 또는 fs를 O_NONBLOCK 모드로 사용해 보셨습니까? – uglypointer
나는 그것을 시도하고 알려 드리겠습니다! 감사! –