linux如何设置在图形界面定时执行脚本?

因最近想要实现通过定时执行脚本,修改熄屏时间的功能(原本需在图形界面系统设置中手动修改)遇到以下疑问:

查到可通过命令gsettings set com.deepin.dde.power line-power-lock-delay 0来执行修改,可针对当前用户成功设置。

于是将其写为脚本,该脚本在图形界面登录A用户,终端命令行中sh执行时,立刻生效(可观察到图形界面变化)
在init3的tty2命令行界面登录B用户,也可以针对B用户手动执行成功。(可观察到tty1的图形界面变化)

但当写作定时任务时 令该脚本以A用户在每日某时刻执行,

9 0 * * * a用户 /x/a.sh>/x/log.log 2>&1

不报错。,手动生成了我设置的日志,确实执行了。可是却没有在图形界面修改。
请问为什么呢?是不是它针对的不是我指定的a用户,,还是说由于命令是仅对当前用户有效的,我的脚本没有读取某些环境变量导致?

或者可否达成这样的效果:
我设置了一个9点的定时任务,我打开linux计算机,进入图形界面,到9点的时候我会发现 我的桌面弹出了一个终端开始执行我的任务。
跟我当前登录的图形界面用的是同一个进程而不是上面所述的后台?

gsettings命令是一个图形界面下的配置工具,需要在图形界面下运行才能生效。而在crontab中执行的脚本在后台运行,没有图形界面环境,因此该命令无效。

如果希望在9点弹出终端并执行任务,可以在crontab中执行一个图形界面程序,如gnome-terminal,并在其中执行gsettings命令。例如:

0 9 * * * gnome-terminal -e "gsettings set com.deepin.dde.power line-power-lock-delay 0"

这将在9点弹出一个gnome-terminal终端,并在其中执行gsettings命令。

可以参考下面的方法:
现执行脚本修改熄屏时间的脚本代码如下:

#!/bin/bash
gsettings set com.deepin.dde.power line-power-lock-delay 0

设置定时任务

# 设置定时任务,以 a 用户的身份每天 9 点执行脚本
9 0 * * * a /x/a.sh > /x/log.log 2>&1

需要注意的是,在执行定时任务时,需要确保执行脚本的用户(即 a 用户)已经登录系统,否则无法生效。

不知道你解决了没?如果没有解决,我们可以聊聊。

首先来说,在linux系统中,常见的任务就是cron,不管你是在图形界面或命令界面都可以使用哈;

题主,这个问题我来替你解决,若有帮助,还望采纳,点击回答右侧采纳即可。

1.首先安装所需程序并启动
crontabs是设置周期性被执行的指令

   yum install vixie-cron
    yum install crontabs
    service crond start
    service crond stop
    service crond status

出现以下信息则表示crond启动成功

● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-02-15 02:13:57 EST; 1 weeks 0 days ago
 Main PID: 94183 (crond)
    Tasks: 1
   Memory: 344.0K
   CGroup: /system.slice/crond.service
           └─94183 /usr/sbin/crond -n


2.将crond加入开机启动
就是把service crond start加入开机启动脚本

3.添加定时任务
vi /etc/crontab,例如设置每天晚上12点重启服务器
tip:定时任务失败很多时候都是crontab时间格式错误

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
  0 0  *  *  * root reboot



4.添加完定时任务后,重启crond,使改动生效

service crond restart

5.查看是否生效
实时查看crontab执行内容

tail -f /var/log/cron

通过系统日志来查看Cron任务是否有执行过

grep "reboot" /var/log/cron

提供参考实例【linux下设置定时执行脚本】,链接:https://blog.csdn.net/qq_41969358/article/details/87892343