109 lines
3.9 KiB
JavaScript
109 lines
3.9 KiB
JavaScript
const { exec } = require('child_process');
|
|
const path = require('path');
|
|
|
|
// Cron job setup for achievements
|
|
const cronJobs = [
|
|
{
|
|
name: 'daily_achievements',
|
|
// Run daily at 19:00 for best-time achievements
|
|
schedule: '0 19 * * *',
|
|
command: `cd ${__dirname} && node best_time_achievements.js >> /var/log/ninjaserver_achievements.log 2>&1`,
|
|
description: 'Daily best-time achievement check at 19:00'
|
|
},
|
|
{
|
|
name: 'weekly_achievements',
|
|
// Run every Sunday at 19:00 for weekly best-time achievements
|
|
schedule: '0 19 * * 0',
|
|
command: `cd ${__dirname} && node best_time_achievements.js >> /var/log/ninjaserver_achievements.log 2>&1`,
|
|
description: 'Weekly best-time achievement check on Sunday at 19:00'
|
|
},
|
|
{
|
|
name: 'monthly_achievements',
|
|
// Run on last day of month at 19:00 for monthly best-time achievements
|
|
schedule: '0 19 28-31 * * [ $(date -d tomorrow +\\%d) -eq 1 ]',
|
|
command: `cd ${__dirname} && node best_time_achievements.js >> /var/log/ninjaserver_achievements.log 2>&1`,
|
|
description: 'Monthly best-time achievement check on last day of month at 19:00'
|
|
}
|
|
];
|
|
|
|
function setupCronJobs() {
|
|
console.log('🕐 Setting up best-time achievement cron jobs...');
|
|
|
|
let cronEntries = [];
|
|
|
|
// Create cron job entries
|
|
cronJobs.forEach(job => {
|
|
const cronEntry = `${job.schedule} ${job.command}`;
|
|
cronEntries.push(cronEntry);
|
|
console.log(`📅 ${job.name}: ${job.schedule} - ${job.description}`);
|
|
});
|
|
|
|
// Add all cron jobs to crontab
|
|
const allCronEntries = cronEntries.join('\n');
|
|
exec(`(crontab -l 2>/dev/null; echo "${allCronEntries}") | crontab -`, (error, stdout, stderr) => {
|
|
if (error) {
|
|
console.error('❌ Error setting up cron jobs:', error);
|
|
return;
|
|
}
|
|
|
|
if (stderr) {
|
|
console.error('⚠️ Cron job warning:', stderr);
|
|
}
|
|
|
|
console.log('✅ All cron jobs setup successfully!');
|
|
console.log('📝 Logs will be written to: /var/log/ninjaserver_achievements.log');
|
|
|
|
// Show current crontab
|
|
exec('crontab -l', (error, stdout, stderr) => {
|
|
if (!error) {
|
|
console.log('\n📋 Current crontab:');
|
|
console.log(stdout);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function removeCronJobs() {
|
|
console.log('🗑️ Removing best-time achievement cron jobs...');
|
|
|
|
exec('crontab -l | grep -v "best_time_achievements.js" | crontab -', (error, stdout, stderr) => {
|
|
if (error) {
|
|
console.error('❌ Error removing cron jobs:', error);
|
|
return;
|
|
}
|
|
|
|
console.log('✅ All cron jobs removed successfully!');
|
|
});
|
|
}
|
|
|
|
// Command line interface
|
|
if (require.main === module) {
|
|
const command = process.argv[2];
|
|
|
|
switch (command) {
|
|
case 'setup':
|
|
setupCronJobs();
|
|
break;
|
|
case 'remove':
|
|
removeCronJobs();
|
|
break;
|
|
case 'status':
|
|
exec('crontab -l | grep best_time_achievements', (error, stdout, stderr) => {
|
|
if (stdout) {
|
|
console.log('✅ Best-time achievement cron jobs are active:');
|
|
console.log(stdout);
|
|
} else {
|
|
console.log('❌ No best-time achievement cron jobs found');
|
|
}
|
|
});
|
|
break;
|
|
default:
|
|
console.log('Usage: node setup_cron.js [setup|remove|status]');
|
|
console.log(' setup - Add best-time achievement cron jobs (daily 19:00, Sunday 19:00, last day of month 19:00)');
|
|
console.log(' remove - Remove all best-time achievement cron jobs');
|
|
console.log(' status - Check if best-time achievement cron jobs are active');
|
|
}
|
|
}
|
|
|
|
module.exports = { setupCronJobs, removeCronJobs };
|