GameServerManagers / GameServerManagers/LinuxGSM

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

Open
#4,584 1 comment 1 reaction 0 assignees View on GitHub
command: backup command: console command: update-lgsm distro: Ubuntu game: 7 Days to Die info: docker info: tmux type: feature
Dominant language
Shell
Stars
4.9k
Forks
864
PR merge metrics
No merged PRs in 30d

Description

### 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
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.