Depois de um dia de luta, finalmente terminei com algo ainda melhor do que precisava:
#!/bin/bash
# Adds RVM to needed paths to start servers with needed Ruby version
PATH=$PATH:$HOME/.rvm/bin
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
# I need this server to run in background
startLocalRedmineServer()(
cd /home/adminuser/ruby_projects/redmine/
rails server webrick -e production --port 3001
)
# I need this to be done in background also
proxyLocalRedmineServer()(
proxylocal 3001 --host=mylocalredmine
)
# This thing should open mate-terminal, run start server, so that I can see real time logs, and stay on the screen in case I need it to be restarted
startOtherLocalServer()(
mate-terminal -e "bash -c 'cd /home/adminuser/ruby_projects/project_abc/';'rails s';'exec /bin/bash'"
)
# This thing should open mate-terminal and start proxying + remain opened
proxyOther()(
mate-terminal -e "bash -c 'proxylocal 3000 --host=projectabc'; 'exec /bin/bash'"
)
startLocalRedmineServer &
proxyLocalRedmineServer &
startOtherLocalServer &
proxyOther &
wait
Esses scripts são adicionados para inicialização, como escrevi acima na pergunta. Depois que o sistema inicia, esse script adiciona novos caminhos, que estavam faltando, e, em seguida, inicia quatro subprocessos separados. Dois deles - isto é, o servidor Redmine e seu proxy - funcionam em segundo plano (não preciso pará-los ou mudar nada). Duas outras funções abrem terminais separados, iniciam o servidor de rails locais e o proxy, para que eu possa pará-lo ou reiniciá-lo quando necessário.