В основном у Вас есть две опции:
используйте a cron
задание с @reboot
спецификация времени (см. crontab(1)
страница справочника для деталей)
запустите его init системой. Поскольку BSD/SysV init разрабатывает, это означает добавлять сценарий где-нибудь, чтобы быть выполненным в желаемом runlevel. Для systemd это включает создание файла единицы и требование его желаемой целью.
Первое решение лучше для вещей, локальных для одной или двух машин (так как они - больше вещи конфигурации); второй подходит для сервиса/демона как вещи, которые, вероятно, будут выполнены в большем количестве систем - и должны на самом деле быть упакованы для создания обслуживания легче.
Для команды оболочки Cat
<
вызывает открытую оболочку File.txt
для чтения. CAT
, со своим стандартным входом, подключенным к File.txt
. CAT
считывается со своего стандартного ввода (SO file.txt
) и копирует контент на свой стандартный выход. Итак, оболочка - это одно открытие файла, но команда CAT
- это то, что читает данные.
Вы можете наблюдать, что происходит, перечисляя системные вызовы, выполняемые оболочкой и его подпроцессами. На Linux:
$ strace -f sh -c 'cat <file.txt' >/dev/null
execve("/bin/sh", ["sh", "-c", "cat <file.txt"], [/* 76 vars */]) = 0
…
open("file.txt", O_RDONLY) = 3
…
dup2(3, 0) = 0
…
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbc737539d0) = 22703
[pid 22702] wait4(-1, <unfinished ...>
[pid 22703] execve("/bin/cat", ["cat"], [/* 76 vars */]) = 0
[pid 22703] read(0, "wibble"..., 32768) = 6
[pid 22703] write(1, "wibble"..., 6) = 6
[pid 22703] read(0, "", 32768) = 0
[pid 22703] close(0) = 0
[pid 22703] close(1) = 0
[pid 22703] close(2) = 0
[pid 22703] exit_group(0) = ?
<... wait4 resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 22703
--- SIGCHLD (Child exited) @ 0 (0) ---
rt_sigreturn(0x11) = 22703
…
(22702 - это процесс Ratear Shell, 22703 - это ребенок CAT
)
Команда оболочки CAT File.txt
работает по-разному.
CAT
, передавая его один параметр, а именно file.txt
.
file.txt
для чтения. CAT
считывается из file.txt
и копирует контент на его стандартный выход. Вы правы. Хотя это не имеет значения во многих ситуациях, если оболочка и процесс имеют разные разрешения, которые могут.
Если этот процесс, который вы вызываете, имеет повышенные привилегии (например, Sudo
или SETUID), то он может использовать эти привилегии для открытия файлов, чтобы ваша оболочка не сможет.
$ sudo cat < /etc/shadow | wc
-bash: /etc/shadow: Permission denied
0 0 0
$ sudo cat /etc/shadow | wc
64 64 1843