Bash

如何使通過 crontab @reboot 啟動的 tmux 使用 bash?

  • June 7, 2013

我有一個啟動 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-shellin ~/.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。然後它會在您登錄時執行。

引用自:https://unix.stackexchange.com/questions/78446