Rho le gros pâté de shell... Bah c’est pas très beau, mais bon faudrait une vraie comparaison (même démon et code équivalent).
Je suis un type allergique au shell, quand ça dépasse 500 lignes. Mais là, ce n'est pas le cas :
wc -l etc/rc
74 etc/rc
J'ai pas tendance à appeler 74 lignes "un gros paquet". Suivant ton raisonnement, je dirais que systemd c'est "un gros paquet de C".
Si tu parles des scripts rc, écrits par les mainteneurs, ils ont une syntaxe claire, et offrent une plus grande souplesse de configuration que les unit systemd. Regardons si cette souplesse conduit à "un gros paquet" :
systemd :
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres
Environment=PGROOT=/var/lib/postgres
SyslogIdentifier=postgres
PIDFile=/var/lib/postgres/data/postmaster.pid
ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data
ExecStart= /usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop= /usr/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast
# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200
[Install]
WantedBy=multi-user.target
Taille :
26 lignes.
Documentation :
aucune.
Coniguration :
Possibilité de configurer le dossier contenant les fichiers de la base de donnée.
rcNG :
# PROVIDE: postgresql
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following line to /etc/rc.conf to enable PostgreSQL:
#
# postgresql_enable="YES"
# # optional
# postgresql_data="/usr/local/pgsql/data"
# postgresql_flags="-w -s -m fast"
# postgresql_initdb_flags="--encoding=utf-8 --lc-collate=C"
# postgresql_class="default"
# postgresql_profiles=""
#
# See /usr/local/share/doc/postgresql/README-server for more info
#
# This scripts takes one of the following commands:
#
# start stop restart reload status initdb
#
# For postmaster startup options, edit ${postgresql_data}/postgresql.conf
command=/usr/local/bin/pg_ctl
. /etc/rc.subr
load_rc_config postgresql
# set defaults
postgresql_enable=${postgresql_enable:-"NO"}
postgresql_flags=${postgresql_flags:-"-w -s -m fast"}
postgresql_user=${postgresql_user:-"pgsql"}
eval postgresql_data=${postgresql_data:-"~${postgresql_user}/data"}
postgresql_class=${postgresql_class:-"default"}
postgresql_initdb_flags=${postgresql_initdb_flags:-"--encoding=utf-8 --lc-collate=C"}
name=postgresql
rcvar=postgresql_enable
extra_commands="reload initdb"
start_cmd="postgresql_command start"
stop_cmd="postgresql_command stop"
restart_cmd="postgresql_command restart"
reload_cmd="postgresql_command reload"
status_cmd="postgresql_command status"
initdb_cmd="postgresql_initdb"
if [ -n "2ドル" ]; then
profile="2ドル"
if [ "x${postgresql_profiles}" != "x" ]; then
eval postgresql_data="\${postgresql_${profile}_data:-}"
if [ "x${postgresql_data}" = "x" ]; then
echo "You must define a data directory (postgresql_${profile}_data)"
exit 1
fi
eval postgresql_enable="\${postgresql_${profile}_enable:-${postgresql_enable}}
eval postgresql_data="\${postgresql_${profile}_data:-${postgresql_data}}
eval postgresql_flags="\${postgresql_${profile}_flags:-${postgresql_flags}}"
eval postgresql_initdb_flags="\${postgresql_${profile}_initdb_flags:-${postgresql_initdb_flags}}"
fi
else
if [ "x${postgresql_profiles}" != "x" -a "x1ドル" != "x" ]; then
for profile in ${postgresql_profiles}; do
eval _enable="\${postgresql_${profile}_enable}"
case "x${_enable:-${postgresql_enable}}" in
x|x[Nn][Oo]|x[Nn][Oo][Nn][Ee])
continue
;;
x[Yy][Ee][Ss])
;;
*)
if test -z "$_enable"; then
_var=postgresql_enable
else
_var=postgresql_"${profile}"_enable
fi
echo "Bad value" \
"'${_enable:-${postgresql_enable}}'" \
"for ${_var}. " \
"Profile ${profile} skipped."
continue
;;
esac
echo "===> postgresql profile: ${profile}"
/usr/local/etc/rc.d/postgresql 1ドル ${profile}
retcode="$?"
if [ "0${retcode}" -ne 0 ]; then
failed="${profile} (${retcode}) ${failed:-}"
else
success="${profile} ${success:-}"
fi
done
exit 0
fi
fi
command_args="-D ${postgresql_data} ${postgresql_flags}"
postgresql_command()
{
su -l ${postgresql_user} -c "exec ${command} ${command_args} ${rc_arg}"
}
postgresql_initdb()
{
su -l -c ${postgresql_class} ${postgresql_user} -c "exec /usr/local/bin/initdb ${postgresql_initdb_flags} -D ${postgresql_data}"
}
run_rc_command "1ドル"
taille :
114 lignes.
Documentation :
les valeurs de configuration possibles sont documentées.
Configuration :
possibilité de choisir les options de la base de donnée, de créer une nouvelle base de donnée, et de choisir plusieurs profils.
Ramenons maintenant cela au même niveau de fonctionnalité que systemd :
Ça ressemble vachement à systemd, j'ai l'impression. Des déclarations de variables pour les commandes à éxécuter, avec la possibilité de factoriser le code dans une fonction. J'ai l'impression que ton commentaire sur la syntaxe illisible est un troll, je te mets au défi de me donner un argument objectif sur ce point.
[^] # Re: systemd
Posté par Enj0lras . En réponse à la dépêche Petit état de l'art des systèmes d'initialisation (1). Évalué à 10.
Je suis un type allergique au shell, quand ça dépasse 500 lignes. Mais là, ce n'est pas le cas :
J'ai pas tendance à appeler 74 lignes "un gros paquet". Suivant ton raisonnement, je dirais que systemd c'est "un gros paquet de C".
Si tu parles des scripts rc, écrits par les mainteneurs, ils ont une syntaxe claire, et offrent une plus grande souplesse de configuration que les unit systemd. Regardons si cette souplesse conduit à "un gros paquet" :
systemd :
Taille :
26 lignes.
Documentation :
aucune.
Coniguration :
Possibilité de configurer le dossier contenant les fichiers de la base de donnée.
rcNG :
taille :
114 lignes.
Documentation :
les valeurs de configuration possibles sont documentées.
Configuration :
possibilité de choisir les options de la base de donnée, de créer une nouvelle base de donnée, et de choisir plusieurs profils.
Ramenons maintenant cela au même niveau de fonctionnalité que systemd :
Lignes :
27
Ça ressemble vachement à systemd, j'ai l'impression. Des déclarations de variables pour les commandes à éxécuter, avec la possibilité de factoriser le code dans une fonction. J'ai l'impression que ton commentaire sur la syntaxe illisible est un troll, je te mets au défi de me donner un argument objectif sur ce point.