Bagaimana menjalankan pekerjaan cron sebagai pengguna tertentu?

66

Saya ingin menjalankan pekerjaan cron sebagai pengguna tertentu di komputer saya. Bagaimana saya menentukan pengguna untuk menjalankan tugas cron?

Pekerjaan cron akan berjalan di server (berjalan di Ubuntu 10.0.4). 'Pengguna' adalah pengguna yang telah dibuat khusus untuk melakukan tugas-tugas sisi server tertentu. 'Pengguna' ini memiliki kesamaan berikut:

  • Tidak dapat masuk ke sistem
  • Memiliki akses terbatas ke folder / file tertentu
morf
sumber

Jawaban:

79

Dengan asumsi Anda tidak bisa begitu saja masuk dan menambahkannya ke crontab pengguna itu, masukkan file /etc/cron.d. Itu harus diformat sebagai cronjob normal, tetapi dengan bidang tambahan. Sebelum perintah dijalankan dan setelah penghitungan waktu, masukkan pengguna. Anda seharusnya dapat menemukan contoh di sistem Anda.

Contoh:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
Daenyth
sumber
Saya pikir ini adalah jawaban yang benar. Saya harus mencari beberapa contoh dan menyelidikinya lagi.
morf
2
Ditambah satu dari saya, ini adalah cara terbaik untuk melakukan apa yang Anda inginkan. Lebih tepatnya lihat di file / etc / crontab dan Anda akan melihat, bahwa setelah templat waktu dan sebelum perintah ada "root" tertulis di sana. Ini berarti bahwa "root" menjalankan perintah-perintah itu. Cukup tambahkan jadwal Anda sendiri dan bukannya "root" gunakan pengguna apa pun. Juga, perhatikan bahwa jika Anda menggunakan crontab per pengguna (seperti yang disarankan oleh Eric D), Anda dapat kehilangan fungsionalitas crontab lebar sistem (/ etc / crontab dan /etc/cron.d).
Patkos Csaba
3
Solusi yang lebih baik saya kira adalah dengan hanya crontab -u <user> -emenyimpan semuanya di satu tempat, yang dapat Anda lakukan sebagai root. Saya suka mengelompokkan pekerjaan cron saya berdasarkan fungsi, bukan hanya oleh pengguna, jadi ini adalah solusi yang lebih baik bagi saya.
Stuart H
41

Sebagai root, untuk mengedit cron dari user1:

crontab -u user1 -e

Anda juga dapat memulai perintah dengan:

su user1 -c foo bar

Tetapi seringkali, skrip sendiri mengurangi akses mereka sendiri ketika dimulai sebagai root.

Eric Darchis
sumber
1

Saya telah mencari ini selama beberapa minggu dan ini akhirnya berhasil ...

Buat skrip Anda sebagai user1

ssh user1@ipaddress
nano hourly-event.sh

masukkan beberapa perintah

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

membuatnya bisa dieksekusi

chmod 755 hourly-event.sh

edit crontab untuk pengguna1

sudo crontab -u user1 -e

beri garis di bawah menunjuk ke skrip Anda

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

keluar - simpan perubahan (ini akan menampilkan direktori / tmp saat menyimpan ... tidak apa-apa)

tunggu pergantian menit

buka yay.txt baru Anda buat

nano /home/user1/yay.txt

Anda seharusnya sekarang memiliki jendela nano terbuka dengan "YAY it works" sebagai baris pertama dan satu-satunya jika bagian bawah jendela nano Anda mengatakan File Baru ... baik .. saya tidak tahu

Anda juga dapat memeriksa entri crontab Anda yang baru untuk user1 di: / var / spool / cron / crontab / user1

PERDAMAIAN

pengguna220364
sumber
0

Terkadang Anda mungkin ingin pengguna memuat lingkungannya, terutama saat menggunakan "rbenv", "nvm", seperti ini:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(di sini perintah source ~/.bash_profileakan memuat Anda lingkungan Ruby atau Node.

Siwei Shen 申思维
sumber