UNPKG

1.87 kBJavaScriptView Raw
1const child_process = require('child_process');
2const fs = require('fs');
3const path = require('path');
4const yaml = require('js-yaml');
5
6let project_root = process.env.PROJECT_ROOT;
7if (/versions\/\d{4}-\d{2}-\d{2},\d{2}-\d{2},[a-z0-9]{7}$/.test(project_root)) {
8 project_root = path.resolve(project_root, '..', '..', 'current');
9}
10
11const config = yaml.safeLoad(fs.readFileSync(project_root + '/deploy.yaml', 'utf-8'));
12
13// add jobs in cron_jobs
14let crontab = [];
15if (Array.isArray(config.cron_jobs)) {
16 crontab = config.cron_jobs.map((job) => {
17 return `${job.pattern} ${project_root}/run_job.sh ${job.job}`;
18 });
19}
20
21// add jobs in cron_jobs_dir
22if (config.cron_jobs_dir) {
23 const cron_jobs_dir = path.resolve(project_root, config.cron_jobs_dir);
24 const files = fs.readdirSync(cron_jobs_dir);
25 for (const file of files) {
26 if (!/(?:\.coffee|\.js|\.ts)/.test(file)) {
27 continue;
28 }
29 const lines = fs.readFileSync(path.resolve(cron_jobs_dir, file), 'utf-8').split('\n');
30 for (const line of lines) {
31 if (/^#\s*cron: (.*)$/.test(line)) {
32 crontab.push(`${RegExp.$1} ${project_root}/run_job.sh ${file.substr(0, file.length - 7)}`);
33 }
34 }
35 }
36}
37
38if (config.workers) {
39 // add run-worker-on-boot job
40 crontab.push(`@reboot ${project_root}/on_boot.sh`);
41
42 // add logrotate job
43 crontab.push(`0 * * * * cd ${project_root} && /usr/sbin/logrotate -s ${process.env.HOME}/.croquis/logrotate_${config.project}.status logrotate.conf`);
44}
45
46// install crontab
47crontab = 'CONTENT_TYPE="text/plain; charset=utf-8"\n' + crontab.join('\n') + '\n';
48
49fs.writeFileSync(`${project_root}/.crontab`, crontab);
50try {
51 child_process.execSync(`crontab -l | grep -v ${project_root} | grep -v CONTENT_TYPE >> ${project_root}/.crontab`);
52} catch (error) {}
53try {
54 child_process.execSync(`crontab ${project_root}/.crontab`);
55} catch (error) {}