我有一个从应用程序启动器运行的终端命令。这很好用,但有时命令会失败,所以我希望终端保持打开状态,以便我可以看到结果。我怎样才能做到这一点?
所以我知道如果我输入 gnome-terminal 或 xterm,会弹出一个新窗口。然后我检查了这两个的手册页,没有找到相关的内容。
然后我注意到在 Mac 下你可以在打开程序的情况下进行。但在 Linux 下似乎不是那么简单。
有没有人有经验?
一个cron作业可能失败的原因真的很大。最常见的原因可能是,
- 语法错误
- 使用没有正确路径的可执行文件
- 使用未在 cron 环境中定义的 shell 变量
- 尝试在不指定的情况下打开 GUI
DISPLAY等等...
有时真的很难理解是哪个错误阻止了作业的执行。有没有办法检测 cron 作业中的错误?
我有一个通过 cron 运行的脚本来更改桌面墙纸。我可以通过导出 DISPLAY 变量来让它工作。
但是我担心脚本应该适用于所有系统的问题。如何在不使用 $DISPLAY 的情况下找到 X 服务器设置的 DISPLAY 值?
那么我怎样才能以DISPLAY编程方式找到正确的值。我只能在DISPLAY=:1. 将其设置为":0"使脚本退出
No protocol specified
Cannot open display.
Run Code Online (Sandbox Code Playgroud) 编辑感谢 pa4080,我在下面的脚本中添加了一行,现在效果很好。我不完全明白如何,哦,好吧。
我想做一个 cron 工作来在一天中的不同时间调整我的亮度。在做了一些谷歌搜索和反复试验之后,我编写了以下运行良好的 bash 脚本:
#!/bin/bash
export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}')
H=$(date +%H)
if (( 00 <= 10#$H && 10#$H < 07 )); then
xrandr --output HDMI-1 --brightness .3 && xrandr --output HDMI-2 --brightness .3 && xrandr --output HDMI-3 --brightness .3
elif (( 07 <= 10#$H && 10#$H < 10 )); then
xrandr --output HDMI-1 --brightness .5 && xrandr --output HDMI-2 --brightness .5 && xrandr --output …Run Code Online (Sandbox Code Playgroud) 我在本地机器上设置了以下 cron。
* * * * * /bin/bash -c /home/JSX/Stuff/J/login-check/open-console.sh
内容open-console.sh如下:-
#! /bin/sh
gnome-terminal --full-screen --hide-menubar -e /home/JSX/Stuff/J/login-check/handle-user.sh
Run Code Online (Sandbox Code Playgroud)
它应该在终端中打开另一个 sh 脚本。但什么也没有发生。还有什么我需要做的吗?像重新启动服务或什么让 cron 作业开始运行?
***文件中给出的绝对路径是正确的。当我/bin/bash -c /home/JSX/Stuff/J/login-check/open-console.sh直接在终端中输入命令时,它起作用了。
我想编写一个脚本来激活虚拟环境并在新终端中运行 Django 项目的服务器。我的startProject.sh是:
#!/bin/bash
source virtualenv/bin/activate
python manage.py runserver
Run Code Online (Sandbox Code Playgroud)
而且,我可以通过以下方式在当前终端上运行此脚本:
source startProject.sh
Run Code Online (Sandbox Code Playgroud)
我想在脚本打开的新终端中执行此操作。
#!/bin/bash
gnome-terminal --working-directory=/home/myname/project -x 'source startProject.sh'
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个。
#!/bin/bash
gnome-terminal --working-directory=/home/myname/project -x '#!/bin/bash\n source startProject.sh'
Run Code Online (Sandbox Code Playgroud)
两者都不起作用。为什么?我读了其他问题,但我仍然不明白。我是初学者,所以请假设没有经验。
我知道 cron 事件存储在其中/var/log/syslog,我可以使用如下命令:
sudo cat /var/log/syslog | grep cron
Run Code Online (Sandbox Code Playgroud)
去看他们。
我宁愿让系统保留一个单独的 cron 日志文件,这样它就不会做太多的工作来观察它,因为它syslog会对所有消息进行排序以提取cron通知。
然后我想使用该watch命令,所以我总是有一个打开的终端窗口显示 cron 活动。
如何让系统保留一个单独的/var/log/cron.log文件?
我是 linux 新手,我阅读并遵循了许多说明在重新启动时运行 python 脚本,但它们都不起作用:
这是我要运行的命令:
/usr/bin/python3 /home/am/projects/AMAcc/map.py
Run Code Online (Sandbox Code Playgroud)
我使用crontab -e并添加了
@reboot /usr/bin/python3 /home/am/projects/AMAcc/map.py
Run Code Online (Sandbox Code Playgroud)
我尝试sudo crontab -e并添加了相同的命令
我什至编辑了/etc/crontab文件并添加了上面的命令。
尝试#!/usr/bin/python3在我的 python 代码顶部添加并更改其权限,例如:
sudo chmod a+x map.py
正如文件中建议所有用户都将能够如果运行cron作业cron.deny文件存在,但其空的,所以我试图创建空的cron.deny两个文件/etc/cron.deny和/usr/lib/cron/cron.deny。但是仍然没有运气运行 cron 工作。
我在做什么?
我有几个终端配置文件。我可以在启动时打开所有配置文件,但它们在启动应用程序中使用此 cmd 在不同的窗口中打开:
gnome-terminal --window-with-profile=ablack && gnome-terminal --window-with-profile=agreeen && gnome-terminal --window-with-profile=aubergine && gnome-terminal --window-with-profile=beige && gnome-terminal --window-with-profile=cyan && gnome-terminal --window-with-profile=grey && gnome-terminal --window-with-profile=orange && gnome-terminal --window-with-profile=white && gnome-terminal --window-with-profile=yellow && gnome-terminal --window-with-profile=ablack
Run Code Online (Sandbox Code Playgroud)
我试图用这个 cmd 打开一个带有多个选项卡的窗口,但没有成功:
gnome-terminal --window-with-profile=ablack && gnome-terminal --tab-with-profile=agreeen && gnome-terminal --tab-with-profile=aubergine && gnome-terminal --tab-with-profile=beige && gnome-terminal --tab-with-profile=cyan && gnome-terminal --tab-with-profile=grey && gnome-terminal --tab-with-profile=orange && gnome-terminal --tab-with-profile=white && gnome-terminal --tab-with-profile=yellow && gnome-terminal --tab-with-profile=ablack
Run Code Online (Sandbox Code Playgroud)
如何使它工作?
我把这一行放在 crontab 中:
1 * * * * DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
Run Code Online (Sandbox Code Playgroud)
该脚本是可执行的。
如果将该命令粘贴到终端中——即没有星号的字符串,它可以完美运行:
DISPLAY=:0.0 /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
Run Code Online (Sandbox Code Playgroud)
我试过:
sudo service cron restart
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在。我怎样才能cron每小时运行该命令?
更新。让它与 ROOT crontab 一起工作:
1 * * * * DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 XAUTHORITY=/home/user/.Xauthority /usr/bin/gnome-terminal -e /home/user/Desktop/mltpl
Run Code Online (Sandbox Code Playgroud)