使用 crontab 命令启动终端

使用 crontab 命令启动终端

我正在尝试使用 crontab 在新终端中运行 python 脚本:

计划任务:

* * * * * /usr/bin/sh /root/teststart.sh

测试启动.sh:

#!/bin/sh
xfce4-terminal -e "/usr/bin/python3 /root/teststart.py" --hold

teststart.py 有一个查询和一个对 gnome-terminal 的 subprocess.call:

subprocess.call(['gnome-terminal', '-e', 'python3 scriptwithvariable.py %s' % (inputvariable)])

当我运行时# sh teststart.sh一切正常,但 crontab 不会执行脚本。

答案1

终端是一个窗口,而 cronjob 不支持它。因此,您可以导出 dash 中的显示内容,甚至导出 XAuthority 中的显示内容 - 但为什么呢?

Cron 在“无头”环境中运行,因此它不知道如何打开窗口。

如果你需要运行终端,你可以安装 tmux。Cron 可以创建并执行tmux您可以随时访问的会话。

- 编辑 -

我不确定,但 tmux 不能这样工作。下面是一个可以在任何安装了 systemd 的机器上运行的示例:

[Unit]
Description=Python Example

[Service]
ExecStart=/usr/bin/python3 /root/bin/somePath/MyPythonProgram.py
StandardOutput=journal

[Install]
WantedBy=multi-user.target

但这不是交互式的。您必须启用并启动该服务一次。

另一个使用 tmux 的示例(我还不能使用 systemd 开始使用):

#!/bin/bash
SESSION=rec
#get the current directory
DIR="$(dirname "$0")"
tmux start-server
# if the session is already running, just attach to it.
tmux has-session -t $SESSION
if [ $? -eq 0 ]; then
       echo "Session $SESSION already exists. Attaching."
       sleep 1
       tmux attach -t $SESSION
       exit 0;
fi

# create a new session, named $SESSION, and detach from it
tmux new-session -d -s $SESSION -n 'Daemon' 
# split into 2 panes vertically window 0
tmux split-window  -v -t 0
tmux new-window    -n 'Web Server' 
#select the only window ...
tmux select-window -t 0
#issue the commands for pane 0 and 1
tmux send-keys -t 0 $DIR/startDaemon.sh C-m
tmux send-keys -t 1 $DIR/startWebServer.sh C-m
#make the top pane the selected one...
tmux select-pane -t 0
#and attach the session
tmux a

这在 tmux 中运行两个会话。

相关内容