如何使通过 crontab @reboot 启动的 tmux 使用 bash?

如何使通过 crontab @reboot 启动的 tmux 使用 bash?

我有一个 crontab,它启动 tmux-launching-script,如下所示:

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

在哪里

#!/bin/bash
# setup tmux session

tmux new -d -s my_session

但是当系统启动时我没有常规提示,但是迅速的 :

-sh-3.00#

如果我的配置中已经有这个,如何将其更改为 bash.tmux.conf

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

编辑

-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

答案1

你的@reboot工作在 root 的 crontab 中。 crontab 中设置的变量仅适用于该 crontab,因此 中的设置/etc/crontab对 root 的 crontab 执行的作业没有影响。

Cron 中的默认 shell 是/bin/shSHELL环境变量设置为/bin/sh除非被覆盖。所以 Tmux 以 开头SHELL=/bin/sh

看起来你的版本/bin/sh是 Bash 3.00。提示符表明 bash 是作为登录 shell 启动的,并且没有设置初始化文件PS1(可能根本没有初始化文件)。

如果您设置default-shellin ~/.tmux.conf,则该变量优先于SHELL环境变量。我怀疑您没有显示.tmux.conf在根目录的主目录中,而是显示在其他位置,也许是您自己的主目录。

您可以选择SHELL=/bin/bash在 root 的 crontab 中进行设置,或者.tmux.conf在 root 的主目录中写入文件。

答案2

计划任务

如果您不以 @reboot 的方式执行此操作,而是稍微重组一下,以便每隔几分钟进行一次检查,看看 tmux 是否已经在运行,如果没有,则调用您的tmux_autostart.sh.

例子

每5分钟跑一次,看看是否tmux_autostart.sh在跑步。对于初学者来说,这样的测试将查看是否tmux_autostart.sh已启动:

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

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

然后我们可以在 cron 中使用上面的测试:

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

xinitrc

如果您只想在登录时启动它,我相信您可以将脚本放入文件中$HOME/.xintrc。然后它会在您登录时运行。

答案3

我认为有一种方法可以通过使用这样的 cronjob 来做到这一点:

@reboot . $HOME/profile; /root/scripts/tmux_autostart.sh

相关内容