Linux指令碼程式設計 sudo命令下設定定時任務

2021-10-07 22:51:55 字數 1653 閱讀 1236

**實現

讓普通使用者使用sudo命令編寫乙個指令碼,指令碼內容為:設定定時任務,每隔5分鐘,輸出「當前使用者名稱_時間」到/tmp/output.txt中,時間格式為: ***x-yy-zz aa:bb:cc。

注意:整個題目答案只有乙個指令碼檔案,且指令碼要分別在本地和雲端成功執行。

本地作業系統:windows 10

本地虛擬機器執行平台:vmware workstation pro 14

本地虛擬機器映象:centos-7-x86_64-minimal-1908.iso

雲伺服器提供商:阿里雲計算****

linux發行版本及版本號:centos 7.6 64位

一般情況下,設定定時任務需要兩個檔案。乙個是定時任務檔案,用於記錄定時詳情和待執行的指令碼位置;另乙個是指令碼檔案,用於記錄待執行的操作。由於題目要求結果只能有乙個指令碼檔案,故我們需要讓指令碼檔案既能建立和執行定時任務檔案,又能執行定時任務規定的內容。

可以使用 if…else… 語句:

(1)在 if 語句中檢查定時任務檔案是否已經建立;

(2)如果沒有,則建立定時任務檔案後開始定時服務;

(3)如果有,則說明已經有定時任務檔案正在執行,且現在已經到達執行定時任務內容的時刻,於是在 else 語句中存放待執行操作的**即可。

#! /bin/bash

# 安裝crontab服務

sudo yum -y install crontabs

# 建立定時任務

filepath=

`pwd

`"/crontest"

# 定時任務檔案設定在當前工作目錄下if[

! -f "$filepath"];

then

# 檢視定時任務檔案是否已經存在

touch

$filepath

# 建立定時任務檔案

echo

"*/5 * * * * "

`pwd

`"/指令碼名.sh"

>

$filepath

# 設定定時任務內容,此處認為本指令碼在當前工作目錄下

# 提交給cron程序,此時會在/var/spool/cron目錄下生成執行檔案,檔名就是使用者名稱

crontab

$filepath

# 設定普通使用者擁有執行/var/spool/cron目錄的許可權

cd /var/spool

sudo

chmod o+rx cron

cd ~

sudo

service crond restart # 開啟crontab服務

else

# 此時定時任務檔案存在且正在執行,所以現在開始執行定時任務內容

name=

`whoami

` # 獲取當前使用者名稱

time=

`sudo

date

"+%y-%m-%d %h:%m:%s"

` # 按照格式要求獲取日期

echo

"$_$"

>> /tmp/output.txt

fi

在本題中,我們認為所編寫的指令碼檔案除了第一次被我們執行以外,都是由正在執行的定時任務滿足時間點後去執行的。所以,如果要修改定時任務內容,在執行修改後的指令碼前,請先刪除定時任務檔案。

linux下面的sudo命令

sudo 表示 superuser do 它允許已驗證的使用者以其他使用者的身份來執行命令。其他使用者可以是普通使用者或者超級使用者。然而,大部分時候我們用它來以提公升的許可權來執行命令。apt 是linux下的一款安裝包管理工具,是乙個客戶 伺服器系統。sudo apt get是用來安裝linux...

Linux中su命令與sudo命令

ps 前幾天,實驗室的同學問到為什麼sudo cd命令不行,我當時幫他解決了這個問題,但是我想了想我自己也不太清楚為什麼sudo cd不行,而需要用到su root然後再使用cd命令。所以自己在網上找了一些資料,並整理了一下發表出來,在自己忘了的時候自己也可以查閱一下!一 linux下的su命令 s...

學習linux命令su和sudo

出於安全考慮,我們往往不使用root登入,而用一般賬號來管理,但有時一些許可權不夠,必須要用root使用者,其實系統提供了兩個命令su和sudo來解決這個問題,這裡先介紹這兩個命令的常見用法,然後對它們使用再進行下對比。su是簡單用法 su的用途是讓使用者暫時改變登入者的身份,變更時要輸入所要變更使...