Como fazer meu tmux que inicia via crontab @reboot use bash?

3

Eu tenho um crontab que inicia o script de inicialização do tmux da seguinte forma:

-sh-3.00# crontab -l
@reboot /root/scripts/tmux_autostart.sh

onde

#!/bin/bash
# setup tmux session

tmux new -d -s my_session

mas quando o sistema inicia, não tenho o prompt normal, mas shell :

-sh-3.00#

como mudar isso para bash se eu já tiver isso na minha configuração .tmux.conf

set-option -g default-shell /bin/bash

EDITAR

-sh-3.00# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
    
por Patryk 06.06.2013 / 14:12

3 respostas

1

Sua tarefa @reboot está no crontab da raiz. As variáveis definidas em um crontab só se aplicam neste crontab, então as configurações em /etc/crontab não influenciam o trabalho executado pelo crontab do root.

O shell padrão no Cron é /bin/sh e a variável de ambiente SHELL está definida como /bin/sh , a menos que seja substituído. Então o Tmux começa com SHELL=/bin/sh .

Parece que seu /bin/sh é Bash 3,00. O prompt indica que o bash foi iniciado como um shell de login e que nenhum arquivo de inicialização configurou PS1 (provavelmente não havia nenhum arquivo de inicialização).

Se você definir default-shell em ~/.tmux.conf , isso terá precedência sobre a variável de ambiente SHELL . Eu suspeito que você não está mostrando .tmux.conf no diretório inicial do root, mas em algum outro local, talvez o seu próprio diretório home.

Você tem a opção de definir SHELL=/bin/bash no crontab do root ou escrever um arquivo .tmux.conf no diretório pessoal do root.

    
por 07.06.2013 / 02:36
2

cron

Em vez de fazer isso como um @reboot, e se você reestruturasse um pouco de modo que fosse dizer a cada poucos minutos e fizesse uma verificação para ver se o tmux já estava rodando, se não, ligue para o seu tmux_autostart.sh . / p>

Exemplo

A cada 5 minutos, execute para ver se tmux_autostart.sh está sendo executado. Para começar, um teste como esse mostrará se tmux_autostart.sh está em alta:

# down
$ ps -eaf|grep -q "[t]mux_autostart.sh"
$ echo $?
1

# up
$ ps -eaf|grep -q "[t]mux_autostart.sh"
$ echo $?
0

Podemos, então, usar o teste acima assim em nosso cron:

*/5 * * * *  ps -eaf|grep -q "[t]mux_autostart.sh" && /root/scripts/tmux_autostart.sh

xinitrc

Se você estiver interessado apenas em iniciar isso quando fizer login, acredito que possa colocar seu script no arquivo $HOME/.xintrc . Em seguida, ele será executado quando você fizer o login.

    
por 06.06.2013 / 14:57
0

Eu acho que há uma maneira de fazer isso usando um cronjob:

@reboot . $HOME/profile; /root/scripts/tmux_autostart.sh
    
por 06.06.2013 / 14:23