GameServerManagers / GameServerManagers/LinuxGSM
[Feature]: LGSM would utilize user-provided file for CRONTAB jobs
- 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
Assessment
This issue has not been assessed yet.