因最近想要实现通过定时执行脚本,修改熄屏时间的功能(原本需在图形界面系统设置中手动修改)遇到以下疑问:
查到可通过命令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