LinuxGSM
LinuxGSM copied to clipboard
[Feature]: LGSM would utilize user-provided file for CRONTAB jobs
User story
As a LGSM user, I want LGSM to create its instance of CRONTAB jobs from a user-provided file to allow customization & rapid (re)deployment
Game
7Days2Die
Linux distro
Ubuntu 22.04
Command
command: console
Further information
Would like to be able to create a file {EG: '.crontab'} in the /DATA folder that, if present, will be used to generate that docker's instance of all scheduled jobs via CRONTAB.
As, upon every STOP/START+ of the container, I have to manually modify CRONTAB via the console (miss a few & becomes quite tedious, running multiple servers) since it resets.
Keep the .YML clean(er) as well.
Default upon starting-up:
linuxgsm@599e2cfa8d46:/app$ crontab -l
*/60 * * * * /app/sdtdserver update > /dev/null 2>&1
vs. (mock code change)
[ -f "${CRONTAB_FILE}" ]]; then
cat /data/.config|crontab -
fi
Giving (mock from file):
linuxgsm@599e2cfa8d46:/app$ crontab -l
## EVERY SUN @ 00:00
0 0 * * 0 /usr/bin/truncate --size 0 /data/log/crontab.log /data/log/rcon.log
## EVERY SUN @ 00:30
30 0 * * 0 /app/*server update-lgsm >> /data/log/crontab.log 2>&1
## EVERY DAY @ 05:00
1 5 * * * /data/RCON/rcon_send_backup_msg.sh sdtd 1 >> /data/log/crontab.log 2>&1
2 5 * * * /data/my_backup.sh >> /data/log/crontab.log 2>&1
## EVERY M,W,F @ 05:30
0 5 * * 1,3,5 /data/RCON/rcon_send_reboot_msg.sh sdtd 30 >> /data/log/crontab.log 2>&1
15 5 * * 1,3,5 /data/RCON/rcon_send_reboot_msg.sh sdtd 15 >> /data/log/crontab.log 2>&1
20 5 * * 1,3,5 /data/RCON/rcon_send_reboot_msg.sh sdtd 10 >> /data/log/crontab.log 2>&1
25 5 * * 1,3,5 /data/RCON/rcon_send_reboot_msg.sh sdtd 5 >> /data/log/crontab.log 2>&1
29 5 * * 1,3,5 /data/RCON/rcon_send_reboot_msg.sh sdtd 1 >> /data/log/crontab.log 2>&1
30 5 * * 1,3,5 /app/*server restart >> /data/log/crontab.log 2>&1
Edit (6/9/24) Hand-jammed a proof of concept:
sudo nano /app/lgsm/modules/command_start.sh
Find:
fn_print_dots "${servername}"
if [ "${shortname}" == "jk2" ]; then
fn_start_jk2
else
fn_start_tmux
fi
New code to add just below:
# If user defined CRONTAB is present, ingest
if [ -f "${HOME}/.crontab" ]; then
fn_script_log_info "Importing CRONTAB file"
cat "${HOME}/.crontab" | crontab -
else
fn_script_log_info "No CRONTAB file to import"
fi
Post-Addition:
...
fn_print_dots "${servername}"
if [ "${shortname}" == "jk2" ]; then
fn_start_jk2
else
fn_start_tmux
fi
# If user defined CRONTAB is present, ingest
#
# Better to utilize 'config-lgsm/_default.cfg' for cross-server usage, ease of use?
#
if [ -f "${HOME}/.crontab" ]; then
fn_script_log_pass "Importing CRONTAB file"
cat "${HOME}/.crontab" | crontab -
else
fn_script_log_info "No CRONTAB file to import"
fi
# Remove starting lockfile when command ends.
...
Test output:
Jun 09 13:42:24.719 pwserver: START: PASS: Started LinuxGSM
Jun 09 13:42:24.822 pwserver: START: PASS: Started LinuxGSM
Jun 09 13:42:24.824 pwserver: START: PASS: Importing CRONTAB file
Jun 09 13:42:24.834 pwserver: RESTART: INFO: LinuxGSM version: v24.2.1
Jun 09 13:42:24.835 pwserver: RESTART: PASS: core_exit.sh exiting with code: 0