我正在尝试使用 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 中运行两个会话。