You*_*eed 3 bash scripts automation schedule
我在 Windows 上有一个批处理应用程序,我每天在午夜运行。最近,我将其转换为 Linux 机器上的 Linux shell 脚本,并希望每天午夜类似地运行它。我的要求如下:-
这是可行的吗?我已经看到下面的链接,但它们不包含我的用例所需的所有标准。如果下面的链接之一是正确的方法,那么示例会非常有帮助。
要在午夜运行 cron 作业,您可以在命令或脚本路径的前面加上:
0 0 * * *
Run Code Online (Sandbox Code Playgroud)
例如,要运行/home/youssif/myscript ,您可以使用:
0 0 * * /home/youssif/myscript
Run Code Online (Sandbox Code Playgroud)
在您的 crontab 文件中。
要编辑 crontab 文件,请使用crontab -e以当前用户身份运行命令。或者,如果您绝对需要以 root 身份运行该命令,您可以运行sudo crontab -e以编辑您的 crontab 文件。
要在终端中运行该命令(如果您以 root 身份运行该命令不是一个好主意),您需要指定要在您的命令或脚本中使用的显示。为此,假设您$DISPLAY是:0(默认),您可以使用以下变量作为命令前缀:
DISPLAY=:0
Run Code Online (Sandbox Code Playgroud)
此外,终端通常会在命令执行后关闭,但您可以在 xterm 中使用 hold 选项来保持终端打开。
因此,要echo "hello world"在午夜在终端中运行,您的命令将如下所示:
0 0 * * DISPLAY=:0 xterm -hold -e 'echo "hello world"'
Run Code Online (Sandbox Code Playgroud)
或运行您的脚本:
0 0 * * DISPLAY=:0 xterm -hold -e '/home/youssif/myscript'
Run Code Online (Sandbox Code Playgroud)
但是,检查 cronjob 输出的标准方法是将终端输出重定向到您可以稍后查看的文件。
例如,要将终端输出重定向到文件,/home/youssif/helloworld.log您可以在 crontab 文件中使用以下行:
0 0 * * echo "hello world" > /home/youssif/helloworld.log
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用该tee命令重定向输出,如下所示:
0 0 * * echo "hello world" | tee /home/youssif/helloworld.log
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用cat命令查看文件的内容:
cat /home/youssif/helloworld.log
Run Code Online (Sandbox Code Playgroud)
这样,命令可以在后台运行,但您仍然可以检查输出。
要根据已运行任务的结果禁用/启用任务,我认为这对于单独的问题确实更合适。我相信您的答案将涉及在 bash 脚本中使用“if then else”语句。
编辑:
正如@Tcooper 指出的那样,我们必须添加2>&1以重定向所有输出,包括错误消息,因此您可能希望使用以下内容:
0 0 * * echo "hello world" 2>&1 > /home/youssif/helloworld.log
Run Code Online (Sandbox Code Playgroud)
或者
0 0 * * echo "hello world" 2>&1 | tee /home/youssif/helloworld.log
Run Code Online (Sandbox Code Playgroud)
所有这些要求都可以轻松满足。Linux 中调度作业的传统方法是crontab。在 Linux 中安排作业的“现代”方法是systemd. crontabUbuntu 上继续受支持。
您的需求1:不寻常:您是否在午夜任务开始时在电脑前等待?否则,这就是 Linux 中使用日志文件的原因。然后系统管理员可以在白天检查日志以检查事情的进展情况。
如果需要,可以在图形终端模拟器中启动作业。然而,这要求您随时登录,从安全角度来看这可能不太理想。
crontab和/或systemd满足要求2。systemd list-units您可以在文件的输出或文件中看到作业列表crontab。您可以通过命令或通过在任务前面systemd删除/添加注释符号或完全删除该行来启用/禁用/删除。#
要求 3可以轻松编写脚本。后续作业可以读取前一个作业已完成的操作,并采取相应的操作。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |