如何使通過 crontab @reboot 啟動的 tmux 使用 bash?
我有一個啟動 tmux-launching-script 的 crontab,如下所示:
-sh-3.00# crontab -l @reboot /root/scripts/tmux_autostart.sh
在哪裡
#!/bin/bash # setup tmux session tmux new -d -s my_session
但是當系統啟動時,我沒有正常提示,而是shell提示:
-sh-3.00#
如果我的配置**.tmux.conf中已經有它,如何將其更改為 bash**
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
你的
@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
在 root 的主目錄中,而是顯示在其他位置,可能是您自己的主目錄。您可以選擇
SHELL=/bin/bash
在 root 的 crontab 中進行設置,或者在 root 的主目錄中寫入.tmux.conf
文件。
cron
與其作為@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
。然後它會在您登錄時執行。