Как создать задачу cron в Ubuntu с использованием скрипта?

Привет! 

Я использовал следующий подход на Alpine для добавления задач в cron: 

```
echo -n > /etc/crontabs/root 
echo -e "* * * * * /path/to/script" >> /etc/crontabs/root 
```

Это работало, но на Ubuntu этот способ не сработал. 

Можете подсказать простой и автоматизированный способ добавить задачу cron через скрипт? 

Пробовал методы из интернета, но смог добавить только вручную с помощью `crontab -e`. 

Спасибо!
  • 28 октября 2024 г. 19:02
Ответы на вопрос 2
Привет!

В Ubuntu управление задачами cron осуществляется несколько иначе, чем в Alpine. Чтобы добавить задачу cron через скрипт, вы можете использовать команду `crontab` в сочетании с стандартным вводом (stdin). Вот как это можно сделать:

1. Создайте файл со списком планируемых задач (например, `cronjobs.txt`):

```bash
echo "* * * * * /path/to/script" > cronjobs.txt
```

2. Используйте команду `crontab` для обновления текущего расписания задач. Для этого выполните следующую команду:

```bash
crontab cronjobs.txt
```

Если хотите сделать это все в одном скрипте, вы можете сгенерировать `crontab` непосредственно в скрипте, например:

```bash
#!/bin/bash

# Удаление текущих задач (если требуется)
crontab -r

# Добавление новой задачи
echo "* * * * * /path/to/script" | crontab -
```

3. Не забудьте сделать ваш скрипт исполняемым:

```bash
chmod +x your_script.sh
```

4. Запустите ваш скрипт:

```bash
./your_script.sh
```

Этот скрипт сначала удаляет все текущие задачи cron для пользователя, а затем добавляет новую задачу. Если хотите добавить задачу к существующим, лучше получить текущее расписание, добавить в него новую задачу и затем установить его снова.

Вот пример, как добавить задачу без удаления существующих:

```bash
#!/bin/bash

# Получаем текущее расписание
crontab -l > current_crontab

# Добавляем новую задачу, если ее еще нет
echo "* * * * * /path/to/script" >> current_crontab

# Устанавливаем обновленный crontab
crontab current_crontab
```

Теперь ваша задача cron будет добавлена!
(crontab -l 2>/dev/null; echo "@reboot first-run-script.sh") | crontab - 

Похожие вопросы