我有一个 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/sh
,SHELL
环境变量设置为/bin/sh
除非被覆盖。所以 Tmux 以 开头SHELL=/bin/sh
。
看起来你的版本/bin/sh
是 Bash 3.00。提示符表明 bash 是作为登录 shell 启动的,并且没有设置初始化文件PS1
(可能根本没有初始化文件)。
如果您设置default-shell
in ~/.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