Skip to content

[Feature]: LGSM would utilize user-provided file for CRONTAB jobs #4584

Description

@irobot73

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions